数据库基础见:点这
环境配置
- 数据库 MySQL8.0:安装见->这里!
- python 3.10
- PyMySQL:封装了mysql驱动和python驱动,可以让python连接到mysql数据库进行操作。
pip install PyMySQL
数据库操作
首先,简单描述下使用流程:
1、连接数据库
2、生成游标对象
3、执行SQL语句(增删改查其实就是执行不同的sql,其他都一样)
4、关闭游标
5、关闭连接
代码演示
1、连接数据库
conn=pymysql.connect(
host='gz-cxxxxxxxt7869.com',
user='lockxxx_cloud',
passwd='12323442421',
port=56798,
db='lockin111_xx_test',
charset='utf8'
)
2、生成游标对象
cur=conn.cursor()
3、设计sql语句
sql='select c.name,c.software_version from ota_versijjj a left join ota_module_hgj b on a.id=b.version_id LEFT JOIN ota_module c on b.module_id=c.id where version= %s'
4、执行sql,并将查询的数据转换为元组
#sql的动态传参方法,学会!!
cur.execute(sql,name)
#通过fetchall方法获得数据
data=cur.fetchall()
5、关闭游标和数据库连接
#关闭游标
cur.close()
#关闭连接
conn.close()
将获取到的数据运用于业务
1、首先将数据转成成业务需要用到的数据类型,比如我将其转换成字典形式使用
#定义一个
version_tmp={}
for key,value in data:
# print(key)
version_tmp[key]=value
# print(version_list)
OTAversion={}
OTAversion['固件版本号']= version
OTAversion['猫眼版本']=version_tmp['camera']
OTAversion['Wi-Fi版本']=version_tmp['wifi']
OTAversion['主控固件版本']=version_tmp['lock']
OTAversion['蓝牙固件版本']=version_tmp['ble']
OTAversion['面容固件版本']=version_tmp['face_module']
OTAversion['指纹固件版本']=version_tmp['finger_print']
将修改的操作提交到数据库(查询结果不需要提交)
conn.commit()
捕获异常,数据要回滚:
conn.rollback()
防止sql注入
啥是sql注入??
用户提交带有恶意的数据与sql语句进行字符串方式的拼接,从而影响了sql语句的语义,最终产生数据泄露的现象。
那么如何防止sql注入呢?
sql语句参数化:
- sql语言中的参数使用%s来占位,不是以字符串格式化操作。
- 将sql语句种%s占位所需要的参数存在一个列表种,把参数列表传递给execute方法中的第二个参数。
sql=“select * from st where name=‘%s’;” % ‘‘huagz’ or 1=1 or ’ ‘’
修改为:
sql=“select * from st where name= %s;” 这里的%s不要加引号,他是参数跟字符串里面的%s不一样。
cursor.execute(sql,(’‘huagz’ or 1=1 or ’ ‘’,))
多个参数的时候,参数按照不同的数据类型传递,可以是元组,列表,字典
cursor.execute(sql,[“jdcnj”,72])