from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() from sqlalchemy import Column, Integer, String from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker class Contacts(Base): __tablename__ = 'contacts' name = Column(String(100), primary_key=True, nullable=False) phone_number = Column(String(32)) # 連線到資料庫 engine = create_engine("mysql+pymysql://root:password@localhost/test?charset=utf8") # 建立 transaction session = sessionmaker(engine) mySession = session() # 查詢 result = mySession.query(Contacts).first() print(result.name) # 新增資料 mySession.add_all([Contacts(name='Steven', phone_number='0963210089')]) mySession.commit()
Flask 是和 Django 一樣,是 python 非常流行的 web framework ,上面是以 ORM 方式存取資料庫的程式,說明如下:
- 資料庫
- 安裝套件
PyMySQL 是連接資料庫的程式庫,SQLAlchemy 則是 ORM 程式庫。
- 程式說明
- line 2: 取得SQLAlchemy 的基礎類別
- line 7~10: 將程式對映到 table Contacts
- line 13: 連線到資料庫,連線字串前的 mysql+pymysql 指出了要使用 pymysql API 連線到 MySQL。
- line 16~17: session 就如 Java 中的 transaction
- line 20~21: 查詢並取得第一列的結果印出來
- line 24~25: 新增一筆資料
除了上面的方法,還可再安裝 Flask-SQLAlchemy package,程式如下:
from flask import Flask from flask_sqlalchemy import SQLAlchemy from sqlalchemy import Column, String app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:password@localhost/test?charset=utf8" app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) class Contacts(db.Model): __tablename__ = 'contacts' name = Column(String(100), primary_key=True, nullable=False) phone_number = Column(String(32)) item1 = Contacts.query.first() print(item1.name) print(item1.phone_number)
- 程式說明:
- line 6: Flask-SQLAlchemy 套件,資料庫的 URI 要放在 SQLALEMY_DATABASE_URI 程式設定裡。
- line 7: 這一行可以不需要,將 SQLALCHEMY_TRACK_MODIFICATIONS 設定為 False,可以讓警告訊息不要出現。
- line 8: 經由這個方式,db 這個類別可以使用 Flask-SQLAlchemy 提供的所有功能。