python - 使用 Pandas 一次将多条记录插入 SQL Server
问题描述
我有一个.CSV
文件,其中包含以下形式的数据:
2006111024_006919J.20J.919J-25.HLPP.FMGN519.XSVhV7u5SHK3H4gsep.log,2006111024,K0069192,MGN519,DN2BS460SEB0
这就是它在文本文件中的显示方式。在 Excel 中,逗号是列。
该.csv
文件可以有 100 行这样的行。为了使编码和阅读代码更容易,我将 pandas 与 SQL Alchemy 混合使用。我是 Python 和所有这些模块的新手
我的初始方法获取所有信息,但每次插入一个 csv 文件的每一行。我的导师说这不是最好的方法,我应该使用“批量”插入/读取 csv 的所有行,然后一次将它们全部插入。到目前为止,我的方法使用 pandas df.to_sql。我听说这种方法有一个“多”插入模式。问题是,我不知道如何以我有限的知识使用它,也不知道它如何与我迄今为止的方法一起使用:
def odfsfromcsv_to_db(csvfilename_list, db_instance):
odfsdict = db_instance['odfs_tester_history']
for csv in csvfilename_list: # is there a faster way to compare the list of files in archive and history?
if csv not in archivefiles_set:
odfscsv_df = pd.read_csv(csv, header=None, names=['ODFS_LOG_FILENAME', 'ODFS_FILE_CREATE_DATETIME', 'LOT', 'TESTER', 'WF_SCRIBE'])
#print(odfscsv_df['ODFS_LOG_FILENAME'])
for index, row in odfscsv_df.iterrows():
table_row = {
"ODFS_LOG_FILENAME": row['ODFS_LOG_FILENAME'],
"ODFS_FILE_CREATE_DATETIME": row['ODFS_FILE_CREATE_DATETIME'],
"LOT": row['LOT'],
"TESTER": row['TESTER'],
"WF_SCRIBE": row['WF_SCRIBE'],
"CSV_FILENAME": csv.name
}
print(table_row)
df1 = pd.DataFrame.from_dict([table_row])
result = df1.to_sql('odfs_tester_history', con=odfsdict['engine'], if_exists='append', index=False)
else:
print(csv.name + " is in archive folder already")
如何修改它并能够一次插入多条记录。我觉得仅限于为表的每一行创建一个新字典,然后将该字典插入到表中的每一行。有没有办法将行整理成一个大结构并使用 pandas 将它们一次全部推送到我的数据库中?
解决方案
我通过将数据框直接提供给 sql 找到了自己的答案。这是对@user13802268 答案的轻微修改:
odfscsv_df = pd.read_csv(csv, header=None, names=['ODFS_LOG_FILENAME', 'ODFS_FILE_CREATE_DATETIME', 'LOT', 'TESTER', 'WAFER_SCRIBE'])
result = odfscsv_df.to_sql('odfs_tester_history', con=odfsdict['engine'], if_exists='append', index=False)
推荐阅读
- java - Java 正则表达式验证器
- javascript - 有没有办法为聊天机器人创建一个“自由写作”部分?
- c# - 如何使用 C# HttpClient 下载大文件的一部分
- javascript - 渲染中的 ReactJs 键错误
- azure-active-directory - 如何使用 Azure Maps 进行谓词搜索,它只返回匹配的 Word 建议
- c++ - 如何使 Visual Studio 远程调试器 2017 和 2019 都在同一台计算机上工作?
- docker - Skaffold:AMD64 开发机器 (Mac),远程集群 ARM64 正在挑选 AMD64 映像
- security - 创建唯一的 802.11 身份验证方法
- sql - 如何使用 TABLE 运算符从两个表运行查询
- python - 无法解析从第三页开始的名称