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