【Flask】Sqlalchemy 外鍵

### 外鍵:
使用SQLAlchemy建立外鍵很是簡單。在從表中增長一個字段,指定這個字段外鍵的是哪一個表的哪一個字段就能夠了。從表中外鍵的字段,必須和父表的主鍵字段類型保持一致。
示例代碼以下:mysql

 1 from sqlalchemy import create_engine, Column, Integer, String, Text, ForeignKey
 2 
 3 from sqlalchemy.ext.declarative import declarative_base
 4 from sqlalchemy.orm import sessionmaker
 5 
 6 HOSTNAME = '127.0.0.1'
 7 PORT = 3306
 8 DATABASE = 'sqlalchemy_first'
 9 USERNAME = 'root'
10 PASSWORD = '123456'
11 
12 DB_URI = 'mysql+pymysql://{username}:{password}@{host}:{port}/{dbname}?charset=utf8'.format(
13         username=USERNAME, password=PASSWORD, host=HOSTNAME, port=PORT, dbname=DATABASE
14 )
15 engine = create_engine(DB_URI)
16 Base = declarative_base(engine)
17 Session = sessionmaker(engine)
18 session = Session()
19 
20 
21 # user
22 class User(Base):
23     __tablename__ = 'user'
24     id = Column(Integer, primary_key=True, autoincrement=True)
25     username = Column(String(50), nullable=False)
26 
27 
28 # article
29 class Article(Base):
30     __tablename__ = 'article'
31     id = Column(Integer, primary_key=True,autoincrement=True)
32     title = Column(String(50), nullable=False)
33     conent = Column(Text, nullable=False)
34     uid = Column(Integer, ForeignKey("user.id"))
35 
36 Base.metadata.drop_all()
37 Base.metadata.create_all()

 

 

外鍵約束有如下幾項:
1. RESTRICT:父表數據被刪除,會阻止刪除。默認就是這一項。
2. NO ACTION:在MySQL中,同RESTRICT。
3. CASCADE:級聯刪除。
4. SET NULL:父表數據被刪除,子表數據會設置爲NULL。sql

相關文章
相關標籤/搜索