【发布时间】:2021-09-20 19:20:45
【问题描述】:
我有多个表在网格中的值更改后更新。这些表并不总是具有相同的键或列,因此我无法明确命名列或格式。唯一相同的是键所在的列。我知道我目前这样做的方式是不正确的,这让我很容易受到注入攻击。
我还遇到了一个问题,其中一些值包含在 SQL 语句中引发错误的键。比如更新WHERE email = t'est@email.com。
我不太确定编写这些语句的正确方法。我做了一些研究,看到了多种用于不同目的的方法,但不确定哪种方法合适。我希望尽可能动态地执行此操作。谁能指出我正确的方向?
连接:
import mysql.connector as sql
import MySQLdb
#Connect
self.db_name = 'database'
self.server = 'server'
self.user_id = 'user'
self.pw = 'password'
try:
self.db_con = MySQLdb.connect(user=self.user_id,password=self.pw,database=self.db_name,
host=self.server,charset='utf8',autocommit=True)
self.cursor = self.db_con.cursor()
except:
print("Error connecting")
SQL 语句:
key_id = str("'") + self.GetCellValue(event.GetRow(),1) + str("'")
target_col = self.GetColLabelValue(event.GetCol())
key_col = self.GetColLabelValue(1)
nVal = str("'") + self.GetCellValue(event.GetRow(),event.GetCol()) + str("'")
#SQL STATEMENTS
sql_update = "UPDATE " + tbl + " SET " + target_col + " = " + nVal + " WHERE " + key_col + " = " + key_id + ""
#INSERT
sql_update = ("INSERT INTO " + str(self.tbl) + "(" + self.key_col + ")" + "VALUES (" + str("'") + str(val) + str("'") + ")")
#DELETE
sql_update = "DELETE FROM " + tbl + " WHERE " + self.key_col + " = " + self.key_id + ""
#SELECT
sql_query = "SELECT * FROM " + self.tbl
#Excecute
try:
self.cursor.execute(sql_update)
except:
print('Error')
self.db_con.rollback()
【问题讨论】:
-
你从哪里得到查询的值,你有任何前端吗?
-
值数据库和服务器在我的代码中是明确的。用户和密码在用户登录时确定。Tbl 由组合框中的选择确定。 Target_col、key_col、key_id 和 nVal 是从 wxgrid 表中提取的
标签: python mysql sql mysql-python