您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何通过executemany()语句转换要插入的熊猫数据框?

如何通过executemany()语句转换要插入的熊猫数据框?

我最终弄清楚了这一点。因此,如果您有一个Pandas Dataframe想要写入数据库ceODBC我使用的模块),则代码为:

(with all_dataas the dataframe)将dataframe值映射到字符串,并将每一行作为一个元组存储在元组列表中

for r in all_data.columns.values:
    all_data[r] = all_data[r].map(str)
    all_data[r] = all_data[r].map(str.strip)   
tuples = [tuple(x) for x in all_data.values]

对于元组列表,将所有null值指示符(已在上面的转换中作为字符串捕获)更改为可以传递给最终数据库的null类型。这对我来说是个问题,可能不适合您。

string_list = ['NaT', 'nan', 'NaN', 'None']

def remove_wrong_nulls(x):
    for r in range(len(x)):
        for i,e in enumerate(tuples):
            for j,k in enumerate(e):
                if k == x[r]:
                    temp=list(tuples[i])
                    temp[j]=None
                    tuples[i]=tuple(temp)

remove_wrong_nulls(string_list)

创建与数据库的连接

cnxn=ceODBC.connect('DRIVER={SOMEODBCDRIVER};DBCName=XXXXXXXXXXX;UID=XXXXXXX;PWD=XXXXXXX;QUIETMODE=YES;', autocommit=False)
cursor = cnxn.cursor()

定义一个元组列表转换为a的函数new_list这是对元组列表的进一步索引,转换为1000个块。这对于将数据传递到SQL查询不能超过1MB的数据库是必要的。

def chunks(l, n):
    n = max(1, n)
    return [l[i:i + n] for i in range(0, len(l), n)]

new_list = chunks(tuples, 1000)

定义您的查询

query = """insert into XXXXXXXXXXXX("XXXXXXXXXX", "XXXXXXXXX", "XXXXXXXXXXX") values(?,?,?)"""

遍历new_list包含每组1000个的元组列表并执行executemany。通过提交并关闭连接来完成此操作,仅此而已:)

for i in range(len(new_list)):
    cursor.executemany(query, new_list[i])
cnxn.commit()
cnxn.close()
其他 2022/1/1 18:38:37 有481人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶