使用flask炼金术在SQLlite中没有设置外键约束

时间:2016-10-15 12:10:47

标签: python database sqlite session sqlalchemy

我在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中创建的表设置外键约束

1 个答案:

答案 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)