1、sqlalchemy.exc.ArgumentError
最近在做一个 Flask + SQLAichemy + MySQL 的web端银行系统。遇到了这样的一个问题,当时纠结了很久,但是查阅度娘后,发现了一个很幼稚的问题。这里记录以此告知各位,小心噢。
File "D:\Python 3.8\lib\site-packages\sqlalchemy\orm\relationships.py", line 2058, in entity raise sa_exc.ArgumentError(
sqlalchemy.exc.ArgumentError: relationship 'Transfer' expects a class or a mapper argument (received: <class 'sqlalchemy.sql.schema.Table'>)
127.0.0.1 - - [28/May/2020 17:01:18] "POST /login HTTP/1.1" 500 -
【菜鸟编程】
我在命名类名时,出现了这一样的幼稚做法。
class deposit(db.Model):
__tablename__='Deposit'
Deposit = db.relationship("Deposit", backref="Card")
【解决方案】
在表类中引入另外的表类时,却使用了首字母大写,额,太那…,想当然的以为是表名。
class Deposit(db.Model):
__tablename__='Deposit'
Deposit = db.relationship("Deposit", backref="Card")
2、sqlalchemy.exc.AmbiguousForeignKeysError
在使用flask + sqlalchemy时,构建表时,是否会有同一个表多次调用某一张表?没错,这里又报错了。flask sqlalchemy多个外键引用同张表报错
sqlalchemy.exc.AmbiguousForeignKeysError: Could not determine join condition between
parent/child tables on relationship Card.Transfer - there are multiple foreign key
paths linking the tables. Specify the 'foreign_keys' argument, providing a list of
those columns which should be counted as containing a foreign key reference to the
parent table.
【菜鸟编程】
my_CardId = db.Column(db.Integer, db.ForeignKey("Card.CardId")) # 外键字段
other_CardId = db.Column(db.Integer, db.ForeignKey("Card.CardId")) # 外键字段
【解决方案】
我们在引入其他表中的一列作为外键时,需要做如下的操作:
Transfer = db.relationship("Transfer", backref="Card")
所以这就导致了同一个表,多次引用其他表的一个值作为外键。这时我们需要在relationship中加入一个参数foregin_keys 。从而就解决了。
Transfer = db.relationship("Transfer", backref="Card",foreign_keys=CardId)
3、flask sqlalchemy.exc.NoForeignKeysError
sqlalchemy.exc.NoForeignKeysError: Could not determine join condition between parent/child tables on relationship Card.Transfer - there are no foreign keys linking
these tables. Ensure that referencing columns are associate
【菜鸟编程】
Transfer = db.relationship("Transfer", backref="Card")
【解决方案】
Transfer = db.relationship("Transfer", backref="Card",primaryjoin='Card.CardId == Transfer.my_CardId')