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