- 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 Sales(db.Model):
- emno = db.Column(db.String(6), primary_key=True)
- name = db.Column(db.String(20))
- customers = db.relationship('Customer')
- class Customer(db.Model):
- cid = db.Column(db.String(10), primary_key=True)
- name = db.Column(db.String(20))
- emno = db.Column(db.String(6), db.ForeignKey(Sales.emno))
- sales1 = Sales(emno='001234')
- sales1.name = 'Steven'
- db.session.add(sales1)
- c1 = Customer(cid='L222149000')
- c1.name = 'Shelley'
- c1.emno = '001234'
- c2 = Customer(cid='A123456789')
- c2.name = 'Martin'
- c2.emno = '001234'
- db.session.add(c1)
- db.session.add(c2)
- db.session.commit()
- print(sales1.customers)
前一篇「Python: ORM using Flask」說明如何用 Flask-SQLAlchemy 連線到資料庫進行查詢,既然是 ORM package,這篇來說明一下怎麼建立關係。
如上的程式碼,有一個 table Sales 儲存業務員的資料,另一個 table Customer 儲存客戶資料,每個客戶會分配一個業務員,所以 Sales 和 Customer 間是一對多的關係。
- line 13: 這是「一」方指向「多」方的方式,在 relationship 間的屬性名稱可任意取名,和資料庫沒有關係,只是方便程式員辨識。
- line 18: 在「多」方建立一個 foreign key 指向「一」方的 primary key。
- line 38: 可以印出如下結果,確認這些類別真的和資料庫的 table 產生實質的連繫。
[<customer a123456789>, <customer l222149000>]
沒有留言:
張貼留言