【Flask】Sqlalchemy 外键

### 外键:
使用SQLAlchemy创建外键非常简单。在从表中增加一个字段,指定这个字段外键的是哪个表的哪个字段就可以了。从表中外键的字段,必须和父表的主键字段类型保持一致。
示例代码如下:

 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。

原文地址:https://www.cnblogs.com/chen0427/p/8647525.html