flask中MySQL外键_FlaskSQLAlchemy如何在MySQL(InnoDB)中用cascade实现约束外键?

我一直在寻找在下面的UsersAccessMapping模型中使用PyMySQL驱动程序和MariaDB 10.0在数据库中使用InnoDB实现对DELETE CASCADE的约束外键。在Python = 3.5.2

SQLAlchemy = 1.1.13

Flask-SQLAlchemy = 2.2

SQL:

^{pr2}$

我现在的models.py里有什么:from app import db

class Users(db.Model):

"""All users' information is stored here"""

__tablename__ = "Users"

UserID = db.Column(db.Integer(), primary_key=True)

Name = db.Column(db.String(200), nullable=False)

Email = db.Column(db.String(200))

Username = db.Column(db.String(200), nullable=False)

Password = db.Column(db.Text, nullable=False)

Created = db.Column(db.DateTime)

Updated = db.Column(db.DateTime)

class UsersAccessLevels(db.Model):

"""This defines the various access levels users can have"""

__tablename__ = "UsersAccessLevels"

UsersAccessLevelID = db.Column(db.Integer, primary_key=True)

LevelName = db.Column(db.String(100), nullable=False)

AccessDescription = db.Column(db.Text)

class UsersAccessMapping(db.Model):

"""Each users' access level is defined here"""

__tablename__ = "UsersAccessMapping"

UsersAccessMappingID = db.Column(db.Integer, primary_key=True)

UserID = db.Column(db.Integer, nullable=False)

UsersAccessLevelID = db.Column(db.Integer, nullable=False)

__table_args__ = (

db.ForeignKeyConstraint(

["fk_useraccess", "fk_useraccess_level"],

["Users.UserID", "UsersAccessLevels.UsersAccessLevelID"],

ondelete="CASCADE"

)

)

table_args语法有问题,但我还没有找到任何关于它应该如何的示例。我发现了一个非常相似的参数,但是第三个参数是一个空dict。如何添加?在

运行python3 manage.py db init时,它将抛出以下内容:File "/srv/vortech-backend/venv/lib/python3.5/site-packages/sqlalchemy/ext/declarative/base.py", line 196, in _scan_attributes

"__table_args__ value must be a tuple, "

sqlalchemy.exc.ArgumentError: __table_args__ value must be a tuple, dict, or None

我试着把ondelete="cascade"改成dict {"ondelete": "cascade"},但那也没用。它给出了与上述相同的错误。在

更新:

问题是ondelete应该在元组之外,如下所示:__table_args__ = (

db.ForeignKeyConstraint(

["fk_useraccess", "fk_useraccess_level"],

["Users.UserID", "UsersAccessLevels.UsersAccessLevelID"]

),

ondelete="CASCADE"

)

但是,由于没有定义ondelete="CASCADE",因此仍然存在语法错误。将其更改为dict{"ondelete": "cascade"}会引发以下问题:File "/srv/vortech-backend/venv/lib/python3.5/site-packages/sqlalchemy/sql/base.py", line 282, in _validate_dialect_kwargs

"named _, got '%s'" % k)

TypeError: Additional arguments should be named _, got 'ondelete'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值