Python 与 MySQL 数据通讯需要安装第三方包:
pyMySQL,安装教程如下:
pip3 安装
sudo apt install python3-pippymysql安装
sudo pip3 install pymysql安装命令:
sudo pip3 install第三方包名
卸载命令:sudo pip3 uninstall第三方包名
查看第三方包信息:pip3 show第三方包名pip3 list: 查看使用pip命令安装的第三方包列表
如果实现将10000条数据插入到MySQL数据库?
如果使用之前学习的MySQL客户端来完成这个操作,那么这个工作量无疑是巨大的,可以通过使用程序代码的方式去连接MySQL数据库,然后对MySQL数据库进行增删改查的方式,实现10000条数据的插入,像这样使用代码的方式操作数据库就称为数据库编程。
1、
导入pymysql包import pymysql
2、
创建连接对象
调用pymysql模块中的connect()函数来创建连接对象,代码如下conn = connect(参数列表)
参数
host:连接mysql主机,如果本机是 localhost参数
port:连接mysql主机的端口号,默认是3306参数
user: 连接的用户名参数
password: 连接的密码参数
database: 数据库的名称参数
charset: 通信采用的编码方式,推荐使用utf8连接对象操作说明:
关闭连接: conn.close()提交数据: conn.commit()撤销数据: conn.rollback()
3、
获取游标对象
获取游标对象的目标是要执行sql语句,完成对数据库的增、删、改、查操作。代码如下:
// 调用连接对象的cursor()方法获取游标对象cur = conn.cursor()游标操作说明:
使用游标执行sql语句:
execute(operation[parameters]) 执行sql语句,返回受影响的行数,主要用于执行insert、update、delete、select等语句获取查询结果聚焦的
一条数据:cur.fetchone()返回一个元组,如(1, 张三 )获取查询结果中的
所有数据:cur.fetchall()返回一个元组,如((1, 张三 ),(2, 李四 ))关闭游标:
cur.close()表明和数据库操作完成
# 1.0 导入pymysql包 import pymysql if __name__ == __main__ : # 2.0 创建连接对象 conn = pymysql.connect(host= localhost , port=3306, user= root , password= qianli01 , database= pyhon3 , charset= utf8 ) # 3.0 获取游标 cursor = conn.cursor() # 4.0 执行sql语句 # 准确sql语句 sql = "select * from students;" cursor.execute(sql) # 获取查询结果 # fetchone一次拿一个值, first = cursor.fetchone() print( 第一个值 ) print(first) second = cursor.fetchone() print( 第二个值 ) print(second) print( 全部 ) all = cursor.fetchall() print(all) # 5.0 关闭游标 cursor.close() # 6.0 关闭连接 conn.close()

备注:获取查询结果
fetchone()和fetchall()方法都是将结果聚焦数据取出,每取一个,结果集的数据就少一个
SQL注入:用户提交带有恶意的数据与SQL语句进行字符串方式的拼接,从而影响了SQL语句的语义,最终产生数据泄露的现象
如何防止SQL注入?
SQL语句参数化
SQL语言中的参数使用%s来占位,此处不是python中的字符串格式化操作
将SQL语句中%s占位所需要的参数存在一个列表中,把参数列表传递给execute方法中第二个参数
// 被sql注入的语句,导致查询的结果是表的全部内容
sql ="select * from students where name = %s " % "黄蓉 or 1 = 1 or "
// 打印sql结果:select * from students where name = 黄蓉 or 1 = 1 or
# 正确写法:
# 使用防止sql注入的sql语句,%s是sql语句的参数和字符串里面的%s不一样,不要加上引号
sql = "select * from students where name = %s"
cursor.execute(sql,("三",))import pymysql if __name__ == __main__ : conn = pymysql.connect(host= localhost , port=3306, user= root , password= qianli01 , database= pyhon3 , charset= utf8 ) cursor = conn.cursor() sql = "insert into students(name,age) values(%s,%s)" # 插入数据,多个参数 try: # 执行sql语句的传入参数,参数类型可以是元组,列表,字典 cursor.execute(sql,["力",20]) # 提交数据 conn.commit() except Exception as e: # 撤销操作 conn.rollback() finally: cursor.close() conn.close()