Python SQL-Abfrageergebnis von Server1 in Server2 schreiben

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
EDM
User
Beiträge: 1
Registriert: Mittwoch 17. Juni 2020, 15:29

Hallo zusammen,

ich suche nach einer Lösung eine Python SQL-Abfrageergebnis von MS-SQL-Server1 in MS-SQL-Server2 zu schreiben.

mein Versuch es mit Pandas zu Lösen funktioniert nicht, hat jemand eine Idee für mich.

Danke EDM

CODE:

import pandas as pd
db1 = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server1+';DATABASE='+testdb+';UID='+username+';PWD='+password)

db2 = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server2+';DATABASE='+testdb+';UID='+username+';PWD='+password)


df = pd.read_sql_query(sql="""select * from testtabelle""", con=db1)
print(df)

df.to_sql(name='testtabelle', con=db2, if_exists='append', index=False)

************Fehlermeldung***********
Traceback (most recent call last):
File "C:\Users\edimart\PycharmProjects\SQLDB\venv\lib\site-packages\pandas\io\sql.py", line 1725, in execute
cur.execute(*args, **kwargs)
File "src\pymssql\_pymssql.pyx", line 460, in pymssql._pymssql.Cursor.execute
File "src\pymssql\_mssql.pyx", line 1104, in pymssql._mssql.MSSQLConnection.execute_query
File "src\pymssql\_mssql.pyx", line 1135, in pymssql._mssql.MSSQLConnection.execute_query
File "src\pymssql\_mssql.pyx", line 1252, in pymssql._mssql.MSSQLConnection.format_and_run_query
File "src\pymssql\_mssql.pyx", line 1274, in pymssql._mssql.MSSQLConnection.format_sql_command
File "src\pymssql\_mssql.pyx", line 2038, in pymssql._mssql._substitute_params
ValueError: 'params' arg (<class 'list'>) can be only a tuple or a dictionary.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "C:\Users\edimart\PycharmProjects\SQLDB\VM_Report\VM_DB_Update.py", line 13, in <module>
df.to_sql(name='testtabelle', con=testdb2, if_exists='append', index=False)
File "C:\Users\edimart\PycharmProjects\SQLDB\venv\lib\site-packages\pandas\core\generic.py", line 2779, in to_sql
sql.to_sql(
File "C:\Users\edimart\PycharmProjects\SQLDB\venv\lib\site-packages\pandas\io\sql.py", line 601, in to_sql
pandas_sql.to_sql(
File "C:\Users\edimart\PycharmProjects\SQLDB\venv\lib\site-packages\pandas\io\sql.py", line 1871, in to_sql
table.create()
File "C:\Users\edimart\PycharmProjects\SQLDB\venv\lib\site-packages\pandas\io\sql.py", line 736, in create
if self.exists():
File "C:\Users\edimart\PycharmProjects\SQLDB\venv\lib\site-packages\pandas\io\sql.py", line 720, in exists
return self.pd_sql.has_table(self.name, self.schema)
File "C:\Users\edimart\PycharmProjects\SQLDB\venv\lib\site-packages\pandas\io\sql.py", line 1882, in has_table
return len(self.execute(query, [name]).fetchall()) > 0
File "C:\Users\edimart\PycharmProjects\SQLDB\venv\lib\site-packages\pandas\io\sql.py", line 1737, in execute
raise ex from exc
pandas.io.sql.DatabaseError: Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': 'params' arg (<class 'list'>) can be only a tuple or a dictionary.
Benutzeravatar
__blackjack__
User
Beiträge: 13078
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@EDM: Pandas kann keine beliebigen DB API V2 Verbindungen als `con`-Argument verwenden. Die Dokumentation ist da sehr deutlich: Entweder ein `sqlite3`-Verbindungsobjekt, oder ein SQLAlchemy ”connectable”, oder eine Zeichenkette die man `sqlalchemy.create_engine()` übergeben könnte. Das `read_sql_query()` funktioniert ist reiner Zufall, das ist von der Dokumentation ausdrücklich *nicht* garantiert.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten