Python代码试图将excel数据保存到数据库中 - 错误转义特殊字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python代码试图将excel数据保存到数据库中 - 错误转义特殊字符相关的知识,希望对你有一定的参考价值。

有人可以帮帮我吗?我正在尝试从excel文件中读取数据,将所有内容保存到数据库文件中,然后查询数据库并打印所有名称属性。我正在使用Python和sqlite3。

我的excel中的字符串中有特殊的字符,所以我试图逃避它们。我不需要特殊字符。我在谷歌上寻找解决方案,但无法找到如何做到这一点。我还是python和数据库的初学者。

我收到此错误消息:

enter image description here

当我在没有“re.escape”的情况下保存所有数据时,我收到以下错误消息:

OperationalError:接近“6”:语法错误

这是hamburgers.xlsx:Excel file的所有内容

import re
import openpyxl
import sqlite3
from sqlite3 import Error

wb_ins = openpyxl.load_workbook("hamburgers.xlsx")
sheet_ins = wb_ins['Hamburger']
try:
    connection = sqlite3.connect("hamburger.db")
    print("hamburger.db created")    
except Error as e:
    print(e)

cursor = connection.cursor()
cursor.execute("DROP TABLE IF EXISTS hamburger")

sql = """CREATE TABLE hamburger (
    last_found Date,
    name char(10),
    stored number(4),
    hamb_id char(30) PRIMARY KEY);"""

cursor.execute(sql)

for row in sheet_ins.iter_rows(min_row=2, max_row=4):
    last_found = row[0].value
    name = re.escape(row[1].value)
    stored = row[2].value
    hamb_id= re.escape(row[3].value)

    cursor.execute("INSERT INTO hamburger VALUES('{lf}', '{n}', '{s}', '{hid}');".format(lf=last_found, n=name, s=stored, hid=hamb_id))

cursor.execute("SELECT name FROM hamburger")
name = cursor.fetchall()
print(name)
答案

不要使用re.escape并且不要对SQL查询使用字符串格式化,这是一种(非常)不好的做法,因为它会将您的代码暴露给SQL注入。

例如,如果有人要为您提供包含hamb_idfake_hamb_id'); DROP TABLE hamburger; --的行的Excel工作表,那么您的代码将执行查询:

INSERT INTO hamburger VALUES('1', '2', '3', 'fake_hamb_id'); DROP TABLE hamburger; --');

在这种情况下,“只是”从数据库中删除汉堡包,但它可以很容易地做到

SELECT * FROM your_users_table;

而是使用参数化查询:

last_found = row[0].value
name = row[1].value
stored = row[2].value
hamb_id= row[3].value

cursor.execute("INSERT INTO hamburger VALUES(?, ?, ?, ?);",
               (last_found, name, stored, hamb_id))

以上是关于Python代码试图将excel数据保存到数据库中 - 错误转义特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

如何将MYSQL中数据导出到EXCEL表中 python 脚本?

将数据从一个 Excel 工作表复制到另一个 Excel 工作表

如何使用python将多个抓取的数据保存到mysql

将上传的Excel保存在数据库中

Python向excel中写入数据的方法 方法简单

如何使用openpyxl将qtablewidget数据保存到excel文件中