FlaskSqlalchemy 外键

Posted 小小易拉罐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FlaskSqlalchemy 外键相关的知识,希望对你有一定的参考价值。

### 外键:
使用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。







以上是关于FlaskSqlalchemy 外键的主要内容,如果未能解决你的问题,请参考以下文章

FlaskSqlalchemy group_by having

(错误)SQL 代码 -530,错误外键 PAY$ID$U 的插入或更新值无效

FlaskSqlalchemy 常用数据类型

sqlalchemy可以只查某一列吗

为啥 Flask SQL Alchemy 允许保存 None 的主键?

Flask SQLAlchemy 中的订阅建模