【发布时间】:2021-12-31 01:45:12
【问题描述】:
我正在尝试创建一个基于 df 列名字典的元组,以便在将数据转储到数据库时通过我的光标。
想象一个有 3 列的 df:
colA colB colC
1awf pref 02-03-2021
2fef cpvd 02-02-2021
3ace pfva 02-05-2021
4cat raof 01-03-2021
5agt btoa 04-01-2021
还有一个我创建的字典,用于定义 df 中每一列的数据类型:
coldict =
{'colA':'varchar(4)',
'colB':'varchar(4)',
'colC':'date'}
通常,我用来将此数据帧转储到数据库表(此处名为 table_A)的游标语句如下所示:
for i,r in df.iterrows():
cursor.execute(
'INSERT INTO table_A(
[colA],[colB],[colC]) VALUES (?,?,?)',
(row['colA'],row['colB'],row['colC']))
现在想象一下,如果表有 40 列。这是很多打字!我想知道是否有可能使这个特定的语句在函数中更具动态性,我会在其中传递字典,它会循环遍历它以创建 cursor.execute 语句的相同的 2 部分。 INSERT 语句很简单,我只是循环遍历 coldict 的字典键并连接字符串。要通过的问号数量也很容易,因为它只是字典键的长度。但是,我正在努力为第二部分做同样的事情 - 即 (row['colA'],row['colB'],row['colC'])... 这可能吗?最终所需的输出如下所示:
def datadump(df, insert_statement, rep_qs, df_cols):
for i,r in df.iterrows():
cursor.execute(
insert_statement) VALUES (rep_qs)',
df_cols)
我只需要一种方法来动态创建 df_cols 元组。希望我在这里有意义!谢谢!
【问题讨论】:
-
看看使用
pd.DataFrame.to_sql
标签: python-3.x pandas pypyodbc