标签:utils plain 执行 注入 from data str 初始 init
防止sql注入
import pymysql ? ? def insertsql(): # 建立连接 connection_sql = pymysql.connect( host=‘localhost‘, port=3306, user=‘root‘, password=‘mysql‘, db=‘xiaoshuobase‘, charset=‘utf8‘ ) # 获取游标 cursor = connection_sql.cursor(pymysql.cursors.DictCursor) str = ‘1‘ # str2 = ‘18‘ sql = ‘select * from book where id >%s ‘ # sql = ‘select name,age,gender,cls_id from students where id >%s and age > %s‘ print(sql) # 尝试执行代码 try: cursor.execute(sql, str) # cursor.execute(sql, [str,str2]) # 获取查询所有的数据 a = cursor.fetchall() print(a) connection_sql.commit() # try中代码有错误进入这里 except Exception as e: connection_sql.rollback() raise e #try里面的代码没有问题进入这里 else: pass #无论上面什么结果,都执行这里 finally: pass # 关闭游标 cursor.close() ? ? insertsql()
import pymysql ? ? # username : adil # password : helloyyj ? ? class DataBaseHandle(object): ‘‘‘ 定义一个 MySQL 操作类‘‘‘ ? def __init__(self, host, username, password, database, port): ‘‘‘初始化数据库信息并创建数据库连接‘‘‘ # 下面的赋值其实可以省略,connect 时 直接使用形参即可 self.host = host # 本机 self.username = username # 用户名(root) self.password = password # 密码 self.database = database # 数据库名字 self.port = port # 端口号 self.db = pymysql.connect( host=self.host, user=self.username, password=self.password, db=self.database, port=self.port, charset="utf8" ? ) self.cursor = self.db.cursor(pymysql.cursors.DictCursor) ? ? ? ? ? ? def insertDB(self, sql): ‘‘‘ 插入数据库操作 ‘‘‘ ? ? try: # 执行sql self.cursor.execute(sql) ? # tt = self.cursor.execute(sql) # 返回 插入数据 条数 可以根据 返回值 判定处理结果 # print(tt) self.db.commit() ? # query = ‘insert into 表名(列名1, 列名2, 列名3, 列名4, 列名5, 列名6) values(%s, %s, %s, %s, %s, %s)‘ # self.cursor.execute(sql) ? except: # 发生错误时回滚 self.db.rollback() finally: self.cursor.close() ? def deleteDB(self, sql): ‘‘‘ 操作数据库数据删除 ‘‘‘ ? try: # 执行sql self.cursor.execute(sql) # tt = self.cursor.execute(sql) # 返回 删除数据 条数 可以根据 返回值 判定处理结果 # print(tt) self.db.commit() except: # 发生错误时回滚 self.db.rollback() finally: self.cursor.close() ? def updateDb(self, sql): ‘‘‘ 更新数据库操作 ‘‘‘ ? ? try: # 执行sql self.cursor.execute(sql) # tt = self.cursor.execute(sql) # 返回 更新数据 条数 可以根据 返回值 判定处理结果 # print(tt) self.db.commit() except: # 发生错误时回滚 self.db.rollback() finally: self.cursor.close() ? def selectDb(self, sql): ‘‘‘ 数据库查询 ‘‘‘ ? try: self.cursor.execute(sql) # 返回 查询数据 条数 可以根据 返回值 判定处理结果 ? data = self.cursor.fetchall() # 返回所有记录列表 ? print(data) ? # 结果遍历 for row in data: name = row["name"] state = row["state"] # 遍历打印结果 print(‘state = %s, name = %s‘ % (state, name)) except: print(‘Error: unable to fecth data‘) finally: self.cursor.close() ? def closeDb(self): ‘‘‘ 数据库连接关闭 ‘‘‘ self.db.close() ? ? if __name__ == ‘__main__‘: DbHandle = DataBaseHandle(‘localhost‘, ‘root‘, ‘mysql‘, ‘xiaoshuobase‘, 3306) ? DbHandle.insertDB("insert into book (name,age,gender) values (‘随便起名‘,19,‘男‘)") # DbHandle.deleteDB("delete from book where name=‘水浒传‘") # DbHandle.selectDb("select * from book where id > 1") ? ? ? DbHandle.closeDb()
from utils1 import DataBaseHandle ? db = DataBaseHandle(‘localhost‘, ‘root‘, ‘mysql‘, ‘xiaoshuobase‘, 3306) db.selectDb("select * from book where id > 1") db.insertDB("insert into book values (7,‘‘随便‘,null,0,null )") #添加的数据要和数据库字段匹配
标签:utils plain 执行 注入 from data str 初始 init
原文地址:https://www.cnblogs.com/gaojunhui/p/14856590.html