【问题标题】:how to create to_sql create_engine如何创建 to_sql create_engine
【发布时间】:2020-08-10 20:14:03
【问题描述】:

我正在尝试将数据框信息添加到 PostgreSQL 的表中。

但我不知道如何创建引擎。 它很可能与连接到 SQL 服务器有关,但我不知道如何创建它。

我在to_sql文档上看到的例子是:

>>> from sqlalchemy import create_engine
>>> engine = create_engine('sqlite://', echo=False)

而我尝试的是:

param_dic = {'host': 'localhost', 'database':'databasename', 'user':'username', 'password':'password' }
conn = pgsql.connect(**param_dic)
cursor = conn.cursor()

for filename in work_dir.glob('excel_filename.xlsx'):
    df = pd.read_excel(filename)
    df.to_sql('table name', conn, if_exists='replace')
    conn.commit()
    cursor.close()

【问题讨论】:

  • 这些看起来是两种不同的连接模式。目前尚不清楚pgsql 的来源。对于create_engine 部分,请参阅Postgres

标签: python postgresql pandas-to-sql


【解决方案1】:
engine = create_engine('sqlite://', echo=False)

这似乎不完整。通常你会把连接字符串放在这里,而不仅仅是“sqlite”。

我猜你想要做的是

# note, put your actual credentials here
engine = create_engine('postgresql://scott:tiger@localhost/test', echo=False)

然后您可以基于此引擎创建连接,例如

with engine.connect() as con:
    # etc...
    df.to_sql('table name', conn, if_exists='replace')
    # etc...

或者只是 con = engine.connect()

【讨论】:

  • 其实我自己已经解决了我的问题。但是我像df.to_sql('table name', engine, if_exists = 'replace')一样直接把引擎放到了df.to_sql。使用 engine.connet() 的真正目的是什么?
  • engine.connect() 只是创建一个连接。显然 df.to_sql() 接受引擎作为参数,所以你真的不需要连接。知道它是如何工作的,但如果您的示例中没有连接,我无论如何都不会建议使用连接。
猜你喜欢
  • 2021-06-06
  • 2022-08-02
  • 2015-09-01
  • 2019-10-14
  • 2017-12-29
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多