gpt4 book ai didi

python - sqlalchemy 中同一表的外键

转载 作者:可可西里 更新时间:2023-11-01 08:40:09 25 4
gpt4 key购买 nike

我有一个 MySQL 表,在 sqlalchemy 中定义,结构如下:

class User(Base):
__tablename__ = 'user'
__table_args__ = {'mysql_charset': 'utf8', 'mysql_engine': 'InnoDB'}
id = Column(Integer, primary_key=True)
handle = Column(String(250), nullable=False)
owned = Column(Boolean(), default=False)
owner_id = Column(Integer, ForeignKey("user.id"), nullable=True, default=null )
current_price = Column(Integer, nullable=False, default=1)
balance = Column(Integer, nullable=False, default=0)

我想要一个关系,以便 owner_id 可以为 null,或者如果设置它,它必须引用同一个表中的有效 user.id。

我不太了解 sqlalchemy 关系的东西,无法做到这一点。本页顶部的特殊内容http://docs.sqlalchemy.org/en/latest/orm/relationship_persistence.html似乎暗示这是可能的,但我无法弄清楚。

然后我希望能够添加像这样的用户:

u1 = User(handle="bob")
u2 = User(handle="jim", owner=u1)

感谢您的帮助!

我应该补充一点,sqlalchemy 使用正确的 FOREIGN KEY 约束执行 CREATE TABLE 没有问题,并且我可以手动将数据插入到遵守规则的表中,因为我希望它们在 MySQL 中,它只使用失败的 sqlalchemy 模型.

编辑:已解决

owner_id 上的“default=null”由于某种原因导致了问题。有用的文档在这里:http://docs.sqlalchemy.org/en/rel_1_0/orm/self_referential.html和该页面的代码示例:http://docs.sqlalchemy.org/en/rel_1_0/orm/examples.html#examples-adjacencylist

对于谷歌蜘蛛机器人,我在这个过程中遇到的错误是:

sqlalchemy.exc.IntegrityError: (_mysql_exceptions.IntegrityError) (1452, 'Cannot add or update a child row: a foreign key constraint fails (`twitfriends`.`tree`, CONSTRAINT `tree_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `tree` (`id`))') [SQL: u'INSERT INTO tree (parent_id, name) VALUES (%s, %s)'] [parameters: (<sqlalchemy.sql.elements.Null object at 0x7fe7e8c468d0>, 'rootnode')]

ArgumentError: Node.next and back-reference Node.prev are both of the same direction <symbol 'ONETOMANY>.  Did you mean to set remote_side on the many-to-one side ?

最佳答案

因为 User 只有一个外键,我希望 sqlalchemy 自动找出连接条件。您还可以添加一个 backref,这样您就可以获得关系的另一端。

class User(Base):
...
owner = relationship('User', remote_side=['id'], backref='owned_users')

Docs

例如

u1 = User(handle="bob")
u2 = User(handle="jim", owner=u1)
print u2.owned_users[0] == u1
# True

关于python - sqlalchemy 中同一表的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34802851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com