Python数据框值插入到数据库表列

Posted

技术标签:

【中文标题】Python数据框值插入到数据库表列【英文标题】:Python dataframe value insertion to database table column 【发布时间】:2018-08-06 07:04:52 【问题描述】:

是否可以将 python 数据框值插入数据库表列?

我使用雪花作为我的数据库。

CommuteTime 是包含 StudentID 列的表。 “add_col”是 python 数据框。我需要将 df 值插入 StudentID 列。

以下是我尝试将 df 值插入表列的代码。

c_col = pd.read_sql_query('insert into "SIS_WIDE"."PUBLIC"."CommuteTime" ("StudentID") VALUES ("add_col")', engine)

当我执行上述操作时,它不接受数据框。它抛出以下错误。

ProgrammingError: (snowflake.connector.errors.ProgrammingError) 000904 (42000): SQL compilation error: error line 1 at position 68
invalid identifier '"add_col"' [SQL: 'insert into "SIS_WIDE"."PUBLIC"."CommuteTime" ("StudentID") VALUES ("add_col")'] 
(Background on this error at: http://sqlalche.me/e/f405)

请提供解决此问题的建议..

【问题讨论】:

当然不能使用pd.read_sql_query。那是为了从 SELECT 语句的结果创建一个数据框。数据帧上有一个to_sql 方法,但这会(尝试)将数据帧作为表格插入。如果您真的想按照查询建议将整个数据框作为单个属性插入到单个记录中,则必须手动执行此操作。 【参考方案1】:

您无法使用pd.read_sql_query

首先,您需要创建Snowflake cursor。

例如

import snowflake.connector

cursor = snowflake.connector.connect(
user='username',
password='password',
database='database_name',
schema='PUBLIC',
warehouse='warehouse_name'
).cursor()

一旦有了游标,就可以这样查询:cursor.execute("SELECT * from "CommuteTime")

要向表中插入数据,需要使用INSERT INTO from Snowflake

请提供有关您的数据框的更多信息,以进一步帮助您。

【讨论】:

【参考方案2】:

我只能使用 SQL Alchemy 来做到这一点,而不是 Snowflake Python 连接器。

from sqlalchemy import create_engine

# Establish the connection to the Snowflake database
sf = 'snowflake://:@'.format(user, password, account, table_location)
engine = create_engine(sf)
# Write your data frame to a table in database 
add_col.to_sql(table_name, con=engine, if_exists='replace', index=False)

请参阅here,了解如何通过传递usernamepasswordaccounttable location 来建立与雪花的连接。

探索here,了解您可以作为if_exists 传递给函数to_sql() 的参数。

【讨论】:

以上是关于Python数据框值插入到数据库表列的主要内容,如果未能解决你的问题,请参考以下文章

创建触发器:通过将数据插入另一个表行来更新表列

在Mysql数据库中插入动态选择框值并显示数据提交消息

如何将记录插入到 sql server express 数据库表中?

在 Python 中获取数据透视表列之间的差异

无论如何要在 Python 中重新排序数据透视表列?

Sql 从一个表列中选择一个最小值,并在一个 SQL 语句中将结果插入到另一个表列中