首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将DataFrame写入postgres表?

如何将DataFrame写入postgres表?
EN

Stack Overflow用户
提问于 2014-04-16 16:29:32
回答 4查看 176.9K关注 0票数 136

有一个DataFrame.to_sql方法,但它只适用于mysql、sqlite和oracle数据库。我不能传递到这个方法postgres连接或sqlalchemy引擎。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-16 16:52:14

从pandas 0.14 (2014年5月底发布)开始,支持postgresql。sql模块现在使用sqlalchemy来支持不同的数据库风格。您可以为postgresql数据库传递sqlalchemy引擎(请参阅docs)。例如:

代码语言:javascript
复制
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连接):

代码语言:javascript
复制
import sql  # the patched version (file is named sql.py)
sql.write_frame(df, 'table_name', con, flavor='postgresql')
票数 179
EN

Stack Overflow用户

发布于 2018-09-01 11:43:55

我就是这么做的。

它可能会更快,因为它使用的是execute_batch

代码语言:javascript
复制
# 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()
票数 40
EN

Stack Overflow用户

发布于 2021-06-14 21:48:37

创建引擎(其中方言=‘postgres’或'mysql‘等):

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23103962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档