Python - SqlAlchemy. 如何关联不同模块或文件中的表?
我在一个文件里有一个类,另一个文件里有一个项目类,它们在同一个模块里。如果它们在不同的模块或文件中,当我定义一个新的Channel时,就会出现错误,因为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))
提前谢谢你们!
2 个回答
1
"NoReferencedTableError: 找不到可以生成外键的 'items' 表"
你所有的表定义应该共享一个元数据对象。也就是说,你应该在一个单独的模块里写 metadata = rdb.MetaData()
,然后在所有的 Table()
中使用这个 metadata
实例。
0
这个字符串的方法应该是可以用的,但如果不行的话,你也可以选择直接导入模块。
如果这样做出现了循环导入的问题,你仍然可以在创建类的实例之后再添加这个属性,像这样:
import item
Channel.items = relation(item.Item,
secondary=item.channel_items,
backref='channels')