[英]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.