我在sqlalchemy中定义了下面的表模式,其中user_id是引用User的user_id表的外键
class Manufacturer(Model):
__tablename__='Manufacturer'
Manufacturer_id=Column(Integer,primary_key=True,autoincrement=True)
name=Column(String(length=100),nullable=False)
description=Column(String(length=1000),nullable=False)
user_id=Column(Integer,ForeignKey(User.user_id),nullable=False)
但是当在sqllite中创建表时,db外键未添加到表中,并且即使用户表没有userid的值,也会插入条目
我搜索了这个问题并发现为了解决这个问题我们需要设置
PRAGMA foreign_keys = ON;
但我无法弄清楚如何使用我当前的DB配置
我有以下代码来创建引擎并使用SQL添加记录 引擎配置: -
engine=create_engine(SQLALCHEMY_DATABASE_URI)
_Session=orm.sessionmaker(autocommit=False,autoflush=True,bind=engine)
session=orm.scoped_session(_Session)
在表格中添加条目的代码
man_details=Manufacturer(**param)
session.add(man_details)
session.commit()
请建议我如何在python-Flask-SQLAlchemy中为在SQLlite3中创建的表设置外键约束
答案 0 :(得分:0)
下面的代码为我工作,并从下面的链接找到它 -
Sqlite / SQLAlchemy: how to enforce Foreign Keys?
def _fk_pragma_on_connect(dbapi_con, con_record):
dbapi_con.execute('pragma foreign_keys=ON')
from sqlalchemy import event
event.listen(engine, 'connect', _fk_pragma_on_connect)