我正尝试使用SQLAlchemy创建一个临时表,并将其与现有表连接。目前为止,我的代码如下:
engine = db.get_engine(db.app, 'MY_DATABASE')
df = pd.DataFrame({"id": [1, 2, 3], "value": [100, 200, 300], "date": [date.today(), date.today(), date.today()]})
temp_table = db.Table('#temp_table',
db.Column('id', db.Integer),
db.Column('value', db.Integer),
db.Column('date', db.DateTime))
temp_table.create(engine)
df.to_sql(name='tempdb.dbo.#temp_table',
con=engine,
if_exists='append',
index=False)
query = db.session.query(ExistingTable.id).join(temp_table, temp_table.c.id == ExistingTable.id)
out_df = pd.read_sql(query.statement, engine)
temp_table.drop(engine)
return out_df.to_dict('records')
由于to_sql
执行的插入语句未被运行,导致没有返回任何结果(我认为这是因为它们使用sp_prepexec
运行,但我不完全确定)。
然后我尝试直接编写SQL语句(CREATE TABLE #temp_table...
,INSERT INTO #temp_table...
,SELECT [id] FROM...
),然后运行pd.read_sql(query, engine)
,但出现了以下错误消息:
此结果对象不返回行。 它已自动关闭。
我猜这是因为该语句不仅仅是SELECT
?
我该如何解决这个问题(两种方法都可以,虽然第一种方法更好,因为它避免了硬编码SQL)。 明确地说,我不能修改现有数据库中的架构 - 它是供应商数据库。
ExistingTable
中是否有任何记录? - Azat Ibrakovtemp_table.c.date
以确保。我得到了在date
列中有None
的行。 - Kris Harpersqlite
上进行了测试,它会导致问题。 - Azat Ibrakov