Ich versuche zu verwenden, verwenden Sie eine temporäre Tabelle mit SQLAlchemy und verknüpfen Sie es mit einer vorhandenen Tabelle. Dies ist, was ich bisherVerwenden Sie temporäre Tabelle mit 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')
Dies keine Ergebnisse zurück, da die Insert-Anweisungen, dass to_sql
tut nicht laufen (ich denke, das ist, weil sie sp_prepexec
laufen verwenden, aber ich bin nicht ganz sicher darüber).
Ich versuchte dann nur das Schreiben der SQL-Anweisung (CREATE TABLE #temp_table...
, INSERT INTO #temp_table...
, SELECT [id] FROM...
) und dann pd.read_sql(query, engine)
ausgeführt. Ich erhalte die Fehlermeldung
Dieses Ergebnisobjekt gibt keine Zeilen zurück. Es wurde automatisch geschlossen.
Ich denke, das liegt daran, dass die Aussage mehr als nur SELECT
?
Wie kann ich dieses Problem beheben (jede Lösung würde funktionieren, obwohl die erste vorzuziehen wäre, da sie hartcodiertes SQL vermeidet). Um es klar zu sagen, ich kann das Schema in der vorhandenen Datenbank nicht ändern - es ist eine Anbieterdatenbank.
gibt es irgendwelche Aufzeichnungen in 'ExistingTable'? –
@AzatIbrakov Ja. Ich habe es tatsächlich in einen linken Join geändert und hinzugefügt 'temp_table.c.date' nur um sicher zu sein. Ich bekomme Zeilen zurück mit 'None' in der' date' Spalte. –
Warum hat Ihre Spalte "Datum" den Typ "DateTime" anstelle von "Date"? –