gpt4 book ai didi

python - SQLalchemy 找不到目标列?

转载 作者:太空宇宙 更新时间:2023-11-04 02:32:39 25 4
gpt4 key购买 nike

ticker_table = Table('ticker_data', MetaData(),
Column('id', Integer, primary_key=True),
Column('ticker', String(100), nullable=False),
Column('adj_slope', Float(3), nullable=False),
Column('sector', String(100), nullable=False),
Column('sub_sector', String(100), nullable=False)
)
price_data = Table('price_data', MetaData(),
Column('id', Integer, primary_key=True),
Column('ticker', String(100), ForeignKey('ticker_data.ticker'), nullable=False),
Column('date', Date),
Column('price', Float(3)),
)
price_data.create(bind=engine)

我遇到了这个错误

Foreign key associated with column 'price_data.ticker' could not find table 'ticker_data' with which to generate a foreign key to target column 'ticker'

我正在使用 MySQL Workbench 和 Python 3.6 以及最新的所有其他工具。不确定会导致此错误的原因是什么?任何帮助将非常感激。也许是因为我使用的是 mysqlclient 因为实际的插件没有更新到 python 3.6?我对 sqlalchemy 的所有事情都比较陌生,所以任何反馈都会让我受益匪浅。

最佳答案

您的问题是您正在为每个表使用两个新的、不相关的 MetaData 实例。这样,在 sqlalchemy 数据结构中,第二个表将不会“看到”另一个。

正确的做法是对两个表使用一个元数据对象,并通过调用 MetaData 实例上的 .create_all() 同时创建它们:

...
metadata = MetaData()
ticker_table = Table('ticker_data', metadata,
Column('id', Integer, primary_key=True),
Column('ticker', String(100), nullable=False),
Column('adj_slope', Float(3), nullable=False),
Column('sector', String(100), nullable=False),
Column('sub_sector', String(100), nullable=False)
)
price_data = Table('price_data', metadata,
Column('id', Integer, primary_key=True),
Column('ticker', String(100), ForeignKey('ticker_data.ticker'), nullable=False),
Column('date', Date),
Column('price', Float(3)),
)

metadata.create_all(bind=engine)

有一种方法可以确保 sqlalchemy “看到”另一个表,即使使用不同的元数据对象:只需将外键列引用为 Python 对象,而不是字符串。当您创建一个表时,它会获得 c 属性,即列集合 - 因此您可以这样声明您的第二个表:

price_data = Table('price_data', MetaData(),
Column('id', Integer, primary_key=True),
Column('ticker', String(100), ForeignKey(ticker_table.c.ticker), nullable=False),
Column('date', Date),
Column('price', Float(3)),
)

关于python - SQLalchemy 找不到目标列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48819296/

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