Mysql
 sql >> Datenbank >  >> RDS >> Mysql

DatabaseError:„Nicht alle Argumente wurden während der Zeichenfolgenformatierung konvertiert“, wenn ich pandas.io.sql.to_sql() verwende

pandas.read_sql verwenden Sie entweder:

  • ein sqlalchemy-Verbindungsobjekt engine.connect()
  • ein DB-API-Objekt nur für SQLite

durch Verwendung von raw_connection() , haben Sie ein db-API-Verbindungsobjekt, also glaubt Pandas, dass es eine Verbindung zu einer SQLite-Datenbank ist (wie wir in Ihrem Fehler FROM sqlite_master WHERE sehen )

Sie müssen con = engine.connect() verwenden

import sqlalchemy
import pandas
engine = sqlalchemy.create_engine('...')
with engine.connect() as conn:
    print('sqla:', list(conn.execute('select * from users')))
    df = pandas.read_sql('select * from users', conn)
    print('df:', df)
    df.to_sql('users2', conn)
    print('sqla:', list(engine.connect().execute('select * from users2')))

Ausgaben:

sqla: [(1, 'toto'), (2, 'titi'), (3, 'tutu'), (4, 'tata')]
df:    id  name
0   1  toto
1   2  titi
2   3  tutu
3   4  tata
sqla: [(1, 'toto'), (2, 'titi'), (3, 'tutu'), (4, 'tata')]

wie erwartet