背景
我正在构建一个将数据从CSV传递到MS SQL数据库的应用程序。该数据库被用作我的企业中所有此类记录(电话)的存储库。当我运行该应用程序时,它读取CSV并将其转换为Pandas Dataframe ,然后我使用SQLAlchemy和pyodbc将记录附加到SQL表中。
然而,由于我所处理的内容的性质,经常会有数据已经导入到表中。我正在寻找一种方法,在将每条记录添加到表中之前,检查我的主键是否存在(SQL表和 Dataframe 中的一列)。
当前代码
# save dataframe to mssql DB engine = sql.create_engine('mssql+pyodbc://CTR-HV-DEVSQL3/MasterCallDb') df.to_sql('Calls', engine, if_exists='append')
样品数据
我的CSV被导入为Pandas Dataframe (主键是FileName,它总是唯一的),然后传递到MS SQL。
+---+------------+-------------+
| | FileName | Name |
+---+------------+-------------+
| 1 | 123.flac | Robert |
| 2 | 456.flac | Michael |
| 3 | 789.flac | Joesph |
+---+------------+-------------+
有什么主意吗?谢谢!
4条答案
按热度按时间8yoxcaq71#
假设您没有内存约束,也没有插入空值,则可以:
根据应用程序的不同,您还可以通过更改查询来减小sql_df的大小。
更新-整体更好,可以插入空值:
sdnqo3pr2#
如果您遍历行DataFrame.iterrows(),然后在每次迭代中使用ON DUPLICATE作为键值FileName以避免再次添加它,该怎么办?
weylhg0b3#
您可以检查是否为空,如下所示:
nc1teljy4#
您可以设置参数index=False参见下面的示例
如果未设置,则命令会自动添加
index
列book_details是我们要插入 Dataframe 的表的名称。
结果
因此,它需要在表中!!!