python - MySQL从Python插入/更新,来自Excel电子表格的数据

标签 python mysql excel

使用 python 和 Excel 中的数据更新插入到 MySQL。

我正在使用 python 填充 MySQL 数据库。

数据存储在 Excel 表格中。

因为DB是用来监控“项目”的,所以有可能出现重复pk的情况,所以在这种情况下需要更新而不是插入,因为一个项目可以有很多阶段。

此外,还有一个值要插入数据库表中,但无法从电子表格中添加。所以我想知道在这种情况下,该值的插入是否大部分是使用单独的查询来完成的,或者是否有办法将其插入到同一查询中。该值为供应商ID,需要插入到id_ops和cif_store之间。

最后,我需要执行内部联接,使用 store_cif 从另一个名为 store 的表导入 store_id。我知道怎么做,但我想知道它是否也必须从单独的查询中执行,或者可以在同一个查询中执行。

到目前为止,我已经做到了这一点。

import xlrd
import MySQLdb


def insert():

    book = xlrd.open_workbook(r"C:\Users\DevEnviroment\Desktop\OPERACIONES.xlsx")
    sheet = book.sheet_by_name("Sheet1")



    database = MySQLdb.connect (host="localhost", user = "pytest", passwd = "password", db = "opstest1")


    cursor = database.cursor()


    query = """INSERT INTO operation (id_ops, cif_store, date, client, 
    time_resp, id_area_service) VALUES (%s, %s, %s, %s, %s, %s)"""


    for r in range(1, sheet.nrows):
        id_ops = sheet.cell(r,0).value
        cif_store = sheet.cell(r,1).value
        date = sheet.cell(r,2).value
        client = sheet.cell(r,3).value
        time_resp = sheet.cell(r,4).value
        id_area_service = sheet.cell(r,5).value


        values = (id_ops, cif_store, date, client, time_resp, id_area_service)


        cursor.execute(query, values)

# Close the cursor
    cursor.close()

# Commit the transaction
    database.commit()

# Close the database connection
    database.close()

# Print results
    print ("")
    print ("")
    columns = str(sheet.ncols)
    rows = str(sheet.nrows)
    print ("Imported", columns,"columns and", rows, "rows. All Done!")
insert()

最佳答案

您正在寻找的是 INSERT ... ON DUPLICATE KEY UPDATE ...

看这里https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html

关于无关数据,如果它是所有行的静态值,您可以将其直接硬编码到 INSERT 查询中。如果它是动态的,您就必须编写一些额外的逻辑。

例如:
query = """INSERT INTO 操作(id_ops、hard_coded_value、cif_store、日期、客户端、 time_resp, id_area_service) VALUES (%s, "我的硬编码值", %s, %s, %s, %s, %s)"""

关于python - MySQL从Python插入/更新,来自Excel电子表格的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57789687/

相关文章:

mysql - 通过选定的id更新数据库记录并重置初始记录

MYSQL - 将 MYSQL Workbench 连接到本地主机上的 MYSQL 服务器

python - 将 txt 文件转换为 xls 文件

python - python读写csv文件出错

python - 将多个变量从 python 脚本传递到 shell 脚本

python - 正则表达式搜索不适用于Python

vba - 使用 VBA 宏将每个 Excel 工作表另存为单独的工作簿

python - 使用 pytest-django 对现有数据库运行测试

mysql - 如何在 sequelize 的同一查询中使用 AND 和 OR 运算符?

java - 使用Java替换Excel中的空白数字单元格