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.
Python SQL-Abfrageergebnis von Server1 in Server2 schreiben
- __blackjack__
- User
- Beiträge: 14336
- 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.
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
