Warum sind Sie dies so zu tun? Es gibt einen kürzeren Weg: if_exists
kwag in to_sql
. Versuchen Sie folgendes:
import pandas.io.sql as psql
from sqlalchemy import create_engine
engine = create_engine(r'postgresql://[email protected]:port/dbname')
c = engine.connect()
conn = c.connection
sql = """
select * from some_table limit 1;
"""
df = psql.read_sql(sql, con=conn)
print df.head()
# Notice how below line is different. You forgot the schema argument
df.to_sql('a', con=conn, schema=schema_name, if_exists='replace')
conn.close()
Nach docs:
ersetzen: Wenn die Tabelle vorhanden ist, löschen sie, neu erstellen und Daten einfügen.
Ps. Weiterer Tipp:
Das ist besser Weg, um die Verbindung zu handhaben:
with engine.connect() as conn, conn.begin():
sql = """select * from some_table limit 1"""
df = psql.read_sql(sql, con=conn)
print df.head()
df.to_sql('a', con=conn, schema=schema_name, if_exists='replace')
Weil es, dass Ihre Verbindung sorgt für immer geschlossen ist, auch wenn Ihr Programm mit einem Fehler beendet. Dies ist wichtig, um Datenkorruption zu verhindern. Weiterhin würde ich einfach folgendes verwenden:
import pandas as pd
...
pd.read_sql(sql, conn)
statt wie du es machst.
Also, wenn ich an Ihrer Stelle bin, dass das Schreiben von Code, würde es so aussehen:
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine(r'postgresql://[email protected]:port/dbname')
with engine.connect() as conn, conn.begin():
df = pd.read_sql('select * from some_table limit 1', con=conn)
print df.head()
df.to_sql('a', con=conn, schema=schema_name, if_exists='replace')
Ich weiß nicht, ob dies eine neue Sache ist, aber anscheinend kann Pandas (jetzt) auch die Verwendung Motor direkt. Z.B. 'df.to_sql ('a', con = engine, schema = schema_name, if_exists = 'ersetzen')' – n1000