python習題:操做mysql數據庫,傳入可變參數,防止sql注入的寫法

def op_mysql(sql,*data, # *data是可變參數的意思
host=setting.MYSQL_HOST,
user=setting.MYSQL_USER,
password=setting.MYSQL_PASSWORD,
db =setting.MYSQL_DB,
port = setting.MYSQL_PORT,
charset = setting.MYSQL_CHARSET):

conn = pymysql.connect(
host=host,
user=user,
password=password,
db =db,
port = port,
charset = charset)

cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
'''sql語句:select 不須要commit,可是須要用fetcheall或fetcheone,返回數據
update,insert,delect等是沒有返回結果的,可是須要commit一下,因此須要進行判斷'''

# cur.execute(sql)

cur.executemany(sql,data)
'''# 要求傳入的參數是一個sql語句,還一個data數組,數組最多爲二維數組;
若是是查詢sql的話,調用函數的時候,寫成op_mysql(sql,數組)
其餘sql語句,調用的時候寫成 op_mysql(sql,*數組)'''

sql_start =sql[:6].upper()#取sql語句字符串前六位

if sql_start=='SELECT':
# res_list = cur.fetchall() # 返回的是一個 list格式的 字典
# res = json.dumps(res_list,ensure_ascii=False) # 把list轉換成json串的方式返回,#因此後面若是要判斷res結果用非空即真的話就沒發判斷了,由於若是返回結果是一個[]的時候,字符串格式的res= '[]' 不是一個空
res =cur.fetchall() # 返回的是一個 list格式的 字典

else:
conn.commit()
res = 'ok'
cur.close()
conn.close()
return res
if __name__ == '__main__': # 意思是,別人導入這個python文件的時候,下面的代碼不會被執行,通常調試的時候用

name = 'admin'
money = 10000
sql = "select * from user WHERE username = %s AND money = %s;" #注意 %s不要加引號,加了引號,容易被人sql注入
data = [name, money]
res = op_mysql(sql, data)
print(res)
sql1 = 'insert into seq (blue,red,date) values (%s,%s,%s)'
all_res = [
['16', '01,02,03,05,09,06', '2018-01-28'],
['15', '01,02,03,05,09,06', '2018-01-28'],
['14', '01,02,03,05,09,06', '2018-01-28'],
['13', '01,02,03,05,09,06', '2018-01-28'],
['13', '01,02,03,05,09,06', '2018-01-28'],
['13', '01,02,03,05,09,06', '2018-01-28'],
['13', '01,02,03,05,09,06', '2018-01-28'],
['13', '01,02,03,05,09,06', '2018-01-28'],
['13', '01,02,03,05,09,06', '2018-01-28'],
['13', '01,02,03,05,09,06', '2018-01-28'],
['13', '01,02,03,05,09,06', '2018-01-28'],
['13', '01,02,03,05,09,06', '2018-01-28'],
]
res = op_mysql(sql1, *all_res) # 若是不加 * 調用函數的時候,由於函數裏寫的是 *data data自己是一個元組,不加*傳進去後,打印出來的data是一個三維的([[]],[[]],[[]]) # 加了 * 以後是把參數一個個的傳進去,因此調用函數的時候,data變成了二維數組 print(res)
相關文章
相關標籤/搜索