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 提供的所有功能。

沒有留言:
張貼留言