使用python对mysql进行操作
创建、删除、修改数据
对数据库数据操作的命令执行后,需要使用commit()提交命令
除sql语句不一样之外其他一样用法。
对于sql语句不要使用python的字符串格式化(如format)进行拼接,容易被sql注入,使用execute的第二个参数用列表的形式传入参数。
import pymysql
# 1.连接到数据库
conn = pymysql.connect(host="192.168.1.66", port=3306, user=root, password="123123", charset='utf8')
# 2.创建游标,连接后用于操作数据库(括号里为空也可以)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 3.发送指令(并没有实际执行)
cursor.execute("insert into tabtest(name,age) values(songxk,18)")
# 当需要动态的在命令中使用参数时,不建议使用.format()等字符串拼接,有安全隐患,容易被sql注入,尽量使用占位符,如下:
# sql = "insert into tabtest(name,age) values(%s, %s)" #使用%s占位符
# cursor.execute(sql, ["songxk", "18"]) #跟一个列表用来补充占位符数据,这里可以提前定义变量,在这里使用变量(如使用input让用户输入),下边举例
# 4.使用commit提交命令(执行命令)
conn.commit()
# 5.断开连接
cursor.close()
conn.close()
使用占位符,录入数据例子:
import pymysql
user = input("请输入姓名:")
age = input("请输入年龄:")
# 1.连接到数据库
conn = pymysql.connect(host="192.168.1.66", port=3306, user=root, password="123123", charset='utf8')
# 2.创建游标,连接后用于操作数据库(括号里为空也可以)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 3.发送指令(并没有实际执行)
# 当需要动态的在命令中使用参数时,不建议使用.format()等字符串拼接,有安全隐患,容易被sql注入,尽量使用占位符,如下:
sql = "insert into tabtest(name,age) values(%s, %s)" #使用%s占位符
cursor.execute(sql, [user, age]) #跟一个列表用来补充占位符数据,这里可以提前定义变量,在这里使用变量(如使用input让用户输入)
# 4.使用commit提交命令(执行命令)
conn.commit()
# 5.断开连接
cursor.close()
conn.close()
查询数据
执行查询命令后使用fetchall()和fetchone()来获取查询结果。不需要commit()
如果没有符合条件的数据fetchall()查到就是个空列表[],fetchone()查到就是个None。
import pymysql
# 1.连接到数据库
conn = pymysql.connect(host="192.168.1.66", port=3306, user=root, password="123123", charset='utf8')
# 2.创建游标,连接后用于操作数据库(括号里为空也可以)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 3.发送指令(查询语句)
sql = "select * from tabtest where name = %s" # 查询语句一样可以使用占位符
cursor.execute(sql, [songxk,]) #跟一个列表用来补充占位符数据,这里可以提前定义变量,在这里使用变量(如使用input让用户输入)
# 注意execute的第二个参数是列表格式,注意格式。
# 4.获取查询结果
## 获取所有查询到的数据使用fetchall()
data_list = cursor.fetchall() #得到结果是一个列表,列表中把获取到的每行数据作为一个字典展示
for dict in data_list: #展示列表中每一行数据。
print(dict)
## 获取所查询数据的第一条数据使用fetchone()
# data_list = cursor.fetchone() #获取符合条件的第一条数据,一个字典
# 5.断开连接
cursor.close()
conn.close()