admin 發表於 2023-4-14 08:35:19

如何與資料庫連接

要連接 MySQL 或 PostgreSQL 資料庫,我們不需要自己重寫。這邊會用到兩個套件,一個是連接 MySQL 用的套件 pymysql、另一個是 PostgreSQL 用的套件 psycopg2。除了套件外,會在著重介紹一套 ORM(Object Relational Mapping)服務 SQLAlchemy, SQLAlchemy 可以與 MySQL、PostgreSQL 連接外,還有不需要直接撰寫 SQL 語法的好處。
# 範例程式
import pymysql.cursors

# Connect to the database
connection = pymysql.connect(host='localhost',# 你伺服器/主機
                           user='user',       # 你資料庫的帳號
                           password='password', # 你資料庫的密碼
                           database='db',   # 你資料庫的名稱
                           cursorclass=pymysql.cursors.DictCursor)

with connection:
    with connection.cursor() as cursor:
      # Create a new record
      sql = "INSERT INTO `users` (`name`, `email`, `company`) VALUES (%s, %s, %s)"
      cursor.execute(sql, ('Anonymous', 'itisa@sample.code', 'famous-company'))

    # connection is not autocommit by default. So you must commit to save
    # your changes.
    connection.commit()

    with connection.cursor() as cursor:
      # Read a single record
      sql = "SELECT `id`, `company` FROM `users` WHERE `email`=%s"
      cursor.execute(sql, ('itisa@sample.code',))
      result = cursor.fetchone()
      print(result)import psycopg2

# Connect to your postgres DB
conn = psycopg2.connect("dbname=test user=postgres password=secret") # 亦或是 dbname="test", user="postgres", password="secret"

# Open a cursor to perform database operations
cur = conn.cursor()

cur.execute("""
    INSERT INTO users (name, email, company)
    VALUES (%s, %s, %s);
    """,
    ("Hermit", "itissecond@sample.code", "best-company"))

# Execute a query
cur.execute("SELECT * FROM")

# Retrieve query results
records = cur.fetchall()

# Make the changes to the database persistent
conn.commit()

# Close communication with the database
cur.close()
conn.close()SQLAlchemy
SQLAlchemy 是一個 Python 操作資料庫的工具,基本上可以分成三個部分:
[*]DBAPI
[*]SQLAlchemy Core
[*]SQLAlchemy Object Relation Mapping (ORM)
下圖是 SQLAlchemy 框架的各個元件組成:
[*]Engine:框架引擎
[*]Connection Pooling:資料庫連結池
[*]Dialect:資料庫DB API種類
[*]Schema/Types:架構&型別
[*]SQL Exprression Language:SQL表示式語言
https://docs.sqlalchemy.org/en/14/_images/sqla_arch_small.pngORM 可以想成是透過 Python 產生的一張資料庫地圖,用於與資料庫溝通、操作的工具。ORM 這個機制除了將資料庫的資料轉成物件外,大部分的資料庫操作都可以透過物件去實現,例如建立、新增、刪除等,甚至是建立資料表之間的關聯也可以用物件實作。在開始寫 ORM 前,不免俗還是要安裝套件。from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.orm import sessionmaker

# 宣告對映
Base = declarative_base()

class User(Base):# 建議放到 models.py 裡
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String(50), nullable=False)
    email = Column(String(50), nullable=False)
    company = Column(String(50), nullable=False)

engine = create_engine('postgresql://postgres:secret@localhost:5432/test', echo=True, future=True) # MySQL 的連接方式 'mysql+mysqlconnector://user:password@localhost:3306/test'

Session = sessionmaker(bind=engine)
session = Session()

session.add(User(name='ed', email='ormtest@gooogle', company='Gooogle'))
person = session.query(User).filter_by(name='ed').first()

session.commit()

print('Who is: ', person)實務上資料庫的使用者密碼資訊 ,configuration 與 environment variables,將敏感的資料放在 .env file 裡, 不 直接放在明碼.

頁: [1]
查看完整版本: 如何與資料庫連接