一、python mysql使用实例
1、连接数据库如下:
import pymysql
conn = pymysql.connect(host='127.0.0.1',
port=3306,
user='root',
password='123456',
db='student',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
也可以使用字典进行连接参数的管理,我觉得这样子更优雅一些:
import pymysql
config = {
'host':'127.0.0.1',
'port':3306,
'user':'root',
'password':'123456',
'db':'rxz',
'charset':'utf8mb4',
'cursorclass':pymysql.cursors.DictCursor,
}
conn = pymysql.connect(**config)
2、插入数据:
执行sql语句前需要获取cursor,因为配置默认自动提交,故在执行sql语句后需要主动commit,最后不要忘记关闭连接:
from datetime import date, datetime, timedelta
import pymysql
#连接配置信息
config = {
'host':'127.0.0.1',
'port':3306,
'user':'root',
'password':'123456',
'db':'students',
'charset':'utf8mb4',
'cursorclass':pymysql.cursors.DictCursor,
}
# 创建连接
conn = pymysql.connect(**config)
#执行sql语句
try:
with conn.cursor() as cursor:
#执行sql语句,插入记录
sql = "insert into college_student(id,name,age,major) values(%s, %s, %s, %s)"
cursor.execute(sql,(1,"jwy",26,"java"))
# 没有设置默认自动提交,需要主动提交,以保存所执行的语句
conn.commit()
finally:
conn.close()
3、执行查询:
from datetime import date, datetime, timedelta
import pymysql
#连接配置信息
config = {
'host':'127.0.0.1',
'port':3306,
'user':'root',
'password':'123456',
'db':'students',
'charset':'utf8mb4',
'cursorclass':pymysql.cursors.DictCursor,
}
# 创建连接
conn = pymysql.connect(**config)
#获取明天的时间
tomorrow = datetime.now().date() + timedelta(days=1)
#执行sql语句
try:
with conn.cursor() as cursor:
#执行sql语句,进行查询
#sql = "SELECT name,age,major FROM college_student WHERE age >%s ;"
sql = "SELECT *FROM college_student;"
cursor.execute(sql)
# 获取查询结果
result = cursor.fetchall()
print(result)
# 没有设置默认自动提交,需要主动提交,以保存所执行的语句
conn.commit()
finally:
conn.close()
"""
[{'id': 1, 'name': 'jwy', 'age': 26, 'major': 'java'}, {'id': 2, 'name': 'wxy', 'age': 30, 'major': 'android'}, {'id': 3, 'name': 'rxz', 'age': 29, 'major': 'python'}, {'id': 4, 'name': 'wy', 'age': 31, 'major': 'android'}, {'id': 5, 'name': 'zj', 'age': 31, 'major': 'photoshop'}]
Process finished with exit code 0
"""
1)获取查询结果 result = cursor.fetchone() :查询支取了一条查询结果,查询结果以字典的形式返回
2)获取查询结果result = cursor.fetchmany(2) :从结果集中获取指定数目的记录,可以使用fetchmany方法
3)获取查询结果result = cursor.fetchall():获取全部结果集可以使用fetchall方法
不过不建议这样使用1)和2,最好在sql语句中设置查询的记录总数3)来使用
练习:学习实例操作
实例一:实现:使用Python实现用户登录,如果用户存在则登录成功(假设该用户已在数据库中)
import pymysql
username = input("请输入用户名:")
password = input("请输入密码:")
#连接配置信息
config = {
'host':'127.0.0.1',
'port':3306,
'user':'root',
'password':'123456',
'db':'dbtest',
'charset':'utf8mb4',
'cursorclass':pymysql.cursors.DictCursor,
}
#连接
conn = pymysql.connect(**config)
#创建游标
cursor = conn.cursor()
sql = "select * from loginInfo where name='{}' and password ='{}'".format(username,password)
print(sql)
#3.执行sql语句
cursor.execute(sql)
result = cursor.execute(sql)
print(result)
#4.关闭连接,游标和连接都要关闭
cursor.close()
conn.close()
if result:
print('登录成功!')
else:
print('登录失败!')
"""
请输入用户名:rxz
请输入密码:123456
select * from loginInfo where name='rxz' and password ='123456'
1
登录成功!
Process finished with exit code 0
"""
三、增、删、改:conn.commit()
commit()方法:在数据库里增,删,改的时候。必须要进行提交,否则插入的时候数据不生效
插入数据
import pymysql
username = input("请输入用户名:")
password = input("请输入密码:")
#连接配置信息
config = {
'host':'127.0.0.1',
'port':3306,
'user':'root',
'password':'123456',
'db':'dbtest',
'charset':'utf8mb4',
'cursorclass':pymysql.cursors.DictCursor,
}
#连接
conn = pymysql.connect(**config)
#创建游标
cursor = conn.cursor()
#操作
#增
sql = "insert into loginInfo(name,password) values(%s,%s)"
effect_row = cursor.execute(sql,(username,password))
#同时插入多条数据
cursor.executemany(sql,[('lisi','110'),('wangwu','119')])
print(effect_row)
#一定记得commit
conn.commit()
#4.关闭连接,游标和连接都要关闭
cursor.close()
conn.close()
修改数据:
import pymysql
username = input("请输入用户名:")
password = input("请输入密码:")
#连接配置信息
config = {
'host':'127.0.0.1',
'port':3306,
'user':'root',
'password':'123456',
'db':'dbtest',
'charset':'utf8mb4',
'cursorclass':pymysql.cursors.DictCursor,
}
#连接
conn = pymysql.connect(**config)
#创建游标
cursor = conn.cursor()
#操作
#修改数据
sql = "update loginInfo set name =%s ,password = %s where id =4"
effect_row = cursor.execute(sql,(username,password))
#一定记得commit
conn.commit()
#4.关闭连接,游标和连接都要关闭
cursor.close()
conn.close()
删除数据
import pymysql
username = input("请输入用户名:")
password = input("请输入密码:")
#连接配置信息
config = {
'host':'127.0.0.1',
'port':3306,
'user':'root',
'password':'123456',
'db':'dbtest',
'charset':'utf8mb4',
'cursorclass':pymysql.cursors.DictCursor,
}
#连接
conn = pymysql.connect(**config)
#创建游标
cursor = conn.cursor()
#操作
#删除数据
sql = "delete from loginInfo where name =%s"
effect_row = cursor.execute(sql,(username))
#一定记得commit
conn.commit()
#4.关闭连接,游标和连接都要关闭
cursor.close()
conn.close()
四、查:fetchone、fetchmany、fetchall
fetchone():获取下一行数据,第一次为首行;
fetchall():获取所有行数据源
fetchmany(4):获取4行数据
默认情况下,我们获取到的返回值是元祖,只能看到每行的数据,却不知道每一列表的是什么,这个时候可以使用以下方式来返回字典,每一行的数据都会生成一个字典
在实例化的时候,将属性cursor设置为pymysql.cursors.DictCursor,设置这个参数
cursorclass:pymysql.cursors.DictCursor,
在fetchone示例中,在获取数据的时候,可以理解开始的时候,有一个行指针指着第一行的上方,获取一行,它就向下移动一行,所以当行指针到最后一行的时候,就不能在获取到行的内容,所以我们可以使用如下方法来移动行指针:
cursor.scroll(1,mode='relative') #相对当前位置移动 cursor.scroll(2,mode='absolute') #相对绝对位置移动 第一个值为移动的行动,整数为向下移动,负数为向下移动,mode指定了是相对当前位置移动,还是相对于行首移动
使用fetchone()
import pymysql
#连接配置信息
config = {
'host':'127.0.0.1',
'port':3306,
'user':'root',
'password':'123456',
'db':'dbtest',
'charset':'utf8mb4',
'cursorclass':pymysql.cursors.DictCursor,
}
#连接
conn = pymysql.connect(**config)
#创建游标
cursor = conn.cursor()
sql = "select * from loginInfo"
cursor.execute(sql)
#3.查询数据
row = cursor.fetchone()
print(row)
#查询第二行数据
row = cursor.fetchone()
print(row)
#4.关闭连接,游标和连接都要关闭
cursor.close()
conn.close()
"""
{'id': 1, 'name': 'rxz', 'password': '123456', 'phone': '13776075901'}
{'id': 2, 'name': 'gsh', 'password': 'gsh123', 'phone': '17312978068'}
Process finished with exit code 0
"""
使用fetchall()
import pymysql
#连接配置信息
config = {
'host':'127.0.0.1',
'port':3306,
'user':'root',
'password':'123456',
'db':'dbtest',
'charset':'utf8mb4',
'cursorclass':pymysql.cursors.DictCursor,
}
#连接
conn = pymysql.connect(**config)
#创建游标
cursor = conn.cursor()
sql = "select * from loginInfo"
cursor.execute(sql)
#3.查询数据
row = cursor.fetchall()
print(row)
#4.关闭连接,游标和连接都要关闭
cursor.close()
conn.close()
"""
[{'id': 1, 'name': 'rxz', 'password': '123456', 'phone': '13776075901'}, {'id': 2, 'name': 'gsh', 'password': 'gsh123', 'phone': '17312978068'}, {'id': 3, 'name': 'gpf', 'password': '123456', 'phone': '13916578357'}, {'id': 4, 'name': 'fanbingbing', 'password': '1234567', 'phone': None}, {'id': 8, 'name': 'lisi', 'password': '110', 'phone': None}, {'id': 9, 'name': 'wangwu', 'password': '119', 'phone': None}]
Process finished with exit code 0
"""
使用fetchmany()
import pymysql
#连接配置信息
config = {
'host':'127.0.0.1',
'port':3306,
'user':'root',
'password':'123456',
'db':'dbtest',
'charset':'utf8mb4',
'cursorclass':pymysql.cursors.DictCursor,
}
#连接
conn = pymysql.connect(**config)
#创建游标
cursor = conn.cursor()
sql = "select * from loginInfo"
cursor.execute(sql)
# 获取2条数据
row = cursor.fetchmany(2)
print(row)
#4.关闭连接,游标和连接都要关闭
cursor.close()
conn.close()
"""
[{'id': 1, 'name': 'rxz', 'password': '123456', 'phone': '13776075901'}, {'id': 2, 'name': 'gsh', 'password': 'gsh123', 'phone': '17312978068'}]
Process finished with exit code 0
"""