Ich versuche, eine einfache Merge Join-Abfrage auf Microsoft SQL Server mit Python SQL Alchemy Core ausführen.SQL Merge Join zwei Tabellen aus zwei separaten Datenbanken
Zunächst lassen Sie mich erklären, wie es das Server-Management-Studio getan mit:
MERGE [Database1].[Schema1].[Table1] table1
USING [Database2].[Schema2].[Table2] table2
ON table1.[Key] = table2.[Key]
WHEN MATCHED THEN
UPDATE
SET table1.[Column] = table2.[Column];
Dies funktioniert gut und die Column
erfolgreich eingestellt.
Aber wenn ich dies mit Python:
DB_TARGET = {
'drivername': 'mssql+pyodbc',
'servername': 'localhost',
'port': '1443',
'username': 'user1',
'password': 'pass',
'driver': 'ODBC Driver 13 for SQL Server',
'trusted_connection': 'yes',
'legacy_schema_aliasing': False
}
params = urllib.parse.quote_plus("DRIVER={" + DB_TARGET['driver'] + "}" +
";SERVER=" + DB_TARGET['servername'] +
";UID=" + DB_TARGET['username']+
";PWD=" + DB_TARGET['password'])
engine1 = create_engine(DB_TARGET['drivername'] + ":///?odbc_connect=%s" % params)
metadata = MetaData(bind=engine1)
conn = engine1.connect()
q="MERGE [Database1].[Schema1].[Table1] table1 \
USING [Database2].[Schema2].[Table2] table2 \
ON table1.[Key] = table2.[Key] \
WHEN MATCHED THEN \
UPDATE \
SET table1.[Column] = table2.[Column];"
conn.execute(q)
conn.close()
Es passiert nichts, keine Ausnahme ausgelöst, und die Column
Werte sind nicht betroffen.
Ich habe SQL Server-Profiler überprüft und sichergestellt, dass die Abfrage gesendet wird.
Ich habe versucht, mehr einfache Abfragen ausführen, wie:
q="SELECT * FROM TABLE1"
funktioniert gut.
Was scheint hier das Problem zu sein?