繁体   English   中英

Python-SqlAlchemy。 如何关联来自不同模块或文件的表?

[英]Python - SqlAlchemy. How to relate tables from different modules or files?

我在同一模块的一个文件中包含此类,而在另一个文件中的另一个文件中包含项目类。 如果在定义新频道时它们位于不同的模块或文件中,则会收到错误消息,因为Item不在同一文件中。 我怎么解决这个问题? 如果两个类都在同一个文件中,则不会出现任何错误。

ChannelTest.py

from ItemTest import Item

metadata = rdb.MetaData()

channel_items = Table(
        "channel_items",
        metadata,
        Column("channel_id", Integer,
            ForeignKey("channels.id")),
        Column("item_id", Integer,
            ForeignKey("items.id"))
    )

class Channel(rdb.Model):
    """ Set up channels table in the database """
    rdb.metadata(metadata)
    rdb.tablename("channels")

    id = Column("id", Integer, primary_key=True)
    title = Column("title", String(100))

    items = relation("Item",
                secondary=channel_items, backref="channels")

Item.py不同的文件,但是在同一模块中

class Item(rdb.Model):
    """ Set up items table in the database """
    rdb.metadata(metadata)
    rdb.tablename("items")

    id = Column("id", Integer, primary_key=True)
    title = Column("title", String(100))

提前致谢!

字符串方法应该可以工作,但如果不能,则可以选择简单地导入模块。

并且,如果这样可以为您提供导入循环,那么您仍然可以实例化此类添加属性:

import item
Channel.items = relation(item.Item,
                         secondary=item.channel_items,
                         backref='channels')

“ NoReferencedTableError:找不到用于生成外键的表'项目'”

您的所有表定义都应共享元数据对象。 因此,您应该在一些单独的模块中执行metadata = rdb.MetaData() ,然后在ALL Table()使用此metadata实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM