有一个DataFrame.to_sql方法,但它只适用于mysql、sqlite和oracle数据库。我不能传递到这个方法postgres连接或sqlalchemy引擎。
发布于 2014-04-16 16:52:14
从pandas 0.14 (2014年5月底发布)开始,支持postgresql。sql
模块现在使用sqlalchemy
来支持不同的数据库风格。您可以为postgresql数据库传递sqlalchemy引擎(请参阅docs)。例如:
from sqlalchemy import create_engine
engine = create_engine('postgresql://username:password@localhost:5432/mydatabase')
df.to_sql('table_name', engine)
您说得对,在pandas中,不支持postgresql 0.13.1版之前的版本。如果你需要使用旧版本的https://gist.github.com/jorisvandenbossche/10841234,这里有一个补丁版本的pandas :pandas。
我在一段时间之前写了这篇文章,所以不能完全保证它总是有效的,但基础应该是存在的)。如果您将该文件放在您工作目录中并导入它,那么您应该能够这样做(其中con
是一个postgresql连接):
import sql # the patched version (file is named sql.py)
sql.write_frame(df, 'table_name', con, flavor='postgresql')
发布于 2018-09-01 11:43:55
我就是这么做的。
它可能会更快,因为它使用的是execute_batch
# df is the dataframe
if len(df) > 0:
df_columns = list(df)
# create (col1,col2,...)
columns = ",".join(df_columns)
# create VALUES('%s', '%s",...) one '%s' per column
values = "VALUES({})".format(",".join(["%s" for _ in df_columns]))
#create INSERT INTO table (columns) VALUES('%s',...)
insert_stmt = "INSERT INTO {} ({}) {}".format(table,columns,values)
cur = conn.cursor()
psycopg2.extras.execute_batch(cur, insert_stmt, df.values)
conn.commit()
cur.close()
发布于 2021-06-14 21:48:37
创建引擎(其中方言=‘postgres’或'mysql‘等):
from sqlalchemy import create_engine
engine = create_engine(f'{dialect}://{user_name}@{host}:{port}/{db_name}')
Session = sessionmaker(bind=engine)
with Session() as session:
df = pd.read_csv(path + f'/{file}')
df.to_sql('table_name', con=engine, if_exists='append',index=False)
https://stackoverflow.com/questions/23103962
复制相似问题