pymysql的基本使用

169 阅读2分钟

下载/卸载pymysql库

pip3 install pymysql
pip3 unstall pymysql

查看本地已安装的python库

pip3 list

查看pymysql库

pip3 show PyMySQL

导包

import pymysql

创建连接

# Connect = Connection = connect,三种方式都可以创建数据库连接
conn = pymysql.connect(host='localhost', 
                       port=3306, 
                       user='root', 
                       password='zking', 
                       database='test1', 
                       charset='utf8')

创建游标

cursor = conn.cursor()

执行sql语句

cursor.execute(sql)

通过游标获取查询结果,返回结果为元组

# 查询一行结果
row = cursor.fetchone()
# 查询所有结果
rows = cursor.fetchall()
for row in rows:
    print(row)

关闭游标

cursor.close()

关闭连接

conn.close()

增删改操作

try:
    cursor.execute(sql)
    # 新增、删除、修改数据需要提交事务
    conn.commit()
except Exception as e:
    conn.rollback()
finally:
    # 关闭游标
    cursor.close()
    # 关闭连接
    conn.close()

防SQL注入

什么是SQL注入:用户提交带有恶意的数据与SQL语句进行字符串拼接,从而影响SQL语句的语义,最终产生数据泄露的影响

如何防止SQL注入?

答:SQL语句参数化

  • SQL语句中的条件内容用%s来占位,此处不是python中的字符串格式化操作
  • 将SQL语句中的%s占位所需要的参数存放到一个列表中,把参数列表传递给execute方法的第二个参数

防止SQL注入示例代码:

# 1.导包
from pymysql import connect

# 2.创建连接 Connect = Connection = connect,三种方式都可以创建数据库连接
conn = connect(host='localhost', 
                       port=3306, 
                       user='root', 
                       password='zking', 
                       database='test1', 
                       charset='utf8')
# 3.创建游标
cursor = conn.cursor()
# 非安全的sql编写方式, 输入 "or 1=1 or"'
# 4.执行sql语句
# sql = 'select * from student where name="%s"' % '张三 "or 1=1 or"'
# print(sql)
# cursor.execute(sql)

# 安全的sql编写方式
# 4.执行sql语句
params = ('张三',)
sql = 'select * from student where name=%s'
print(sql)
cursor.execute(sql, params)
# 通过游标获取查询结果,返回结果位元组
rows = cursor.fetchall()
for row in rows:
    print(row)
# 5.关闭游标
cursor.close()
# 6.关闭连接
conn.close()