在之前的学习中我们在登录系统操作的时候,数据都是储存在本地的一个文件中,这种操作在实际运用中肯定是不可取的,因为在实际中我们的数据都是存储在数据库中,用户注册的时候把注册信息存在数据库中,在登录的时候直接访问数据库进行下一步操作.那么如何在python3 中进行mysql数据库操作呢?
python3连接mysql
在python中使用mysql,需要使用一个第三方模块,这个模块就是PYMySQL,在使用的时候调用这个模块就行,在python2中则是使用mysqldb,在Django中也是使用pymsql连接mysql数据库.
安装pymsql
在使用pymsql的之前,我们需要知道在python的IDE中没有这个库,需要我们自己安装,安装非常的简单,只需要打开电脑的终端,然后输入下列代码就行:
pip install pymysql
这样pymysql
就已经安装好了在python的IDE中再导入一下就行.
连接数据库
注意事项
在连接数据库的时候我们需要注意几个问题,这也是使用数据库的前提
- 拥有一个mysql数据库,这个数据库可以是本地的也可以是其他地方的,但是必须要有.
- 你有可以连接该数据库的用户名和密码,在数据库里你得获得授权.
- 你有一个有权限操作的库
基本使用
1. 导入pymysql模块
和其他模块的导入一样,我们需要导入下pymsql
这个模块,导入的语句如下:
import pymsql
2. 链接数据库
再导入完之后我们就需要开始连接mysql数据库:
conn = pymsql.connect(host='你的数据库的地址',
user='用户名',
password='密码',
database='数据库名',
charset='utf8')
到此你就登录了你要登录的数据库了,在这有个重要的事!!! utf8!utf8!utf8! 重要的事情说三遍,记住不带-
.带-
就错了.
3. 获得光标对象
我们登录后要操作mysql数据库,我们需要得到一个可以执行sql语句的光标对象,就像在终端上一样需要有个定位.
cursor = conn.cursor()
4. 执行sql语句
获得光标后,我们需要开始执行SQL语句.
cursor.execute('select * from userinfo;')
这个是默认返回元组类型的数据.
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
返回的是字典类型的数据
5.提交
在执行完sql语句之后,我们需要提交,数据才会保存到数据库
conn.commit()
6.回滚
在执行增删改操作时,如果不想提交前面的操作,可以使用 rollback() 回滚取消操作.
# 导入pymysql模块
import pymysql
# 连接database
conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);"
username = "DSB"
age = 18
try:
# 执行SQL语句
cursor.execute(sql, [username, age])
# 提交事务
conn.commit()
except Exception as e:
# 有异常,回滚事务
conn.rollback()
cursor.close()
conn.close()
7.关闭
- 关闭光标对象
cursor.close()
- 关闭连接
conn.close()
增删改查操作
在pymysql模块下对数据库进行增删改查也是可以的.同在终端对数据库增删改查一样.
增
在pymsql模块中,我们连接好了数据库,就可以对数据库里边的表进行增加操作了.
# 导入pymysql模块
import pymysql
# 连接database
conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);"
username = "DSB"
age = 18
# 执行SQL语句
cursor.execute(sql, [username, age])
# 提交事务
conn.commit()
cursor.close()
conn.close()
其中,%s是占位符.如果数据输入有误就用回滚取消操作,在操作完之后获取插入数据的ID
# 导入pymysql模块
import pymysql
# 连接database
conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);"
username = "DSB"
age = 18
try:
# 执行SQL语句
cursor.execute(sql, [username, age])
# 提交事务
conn.commit()
# 提交之后,获取刚插入的数据的ID
last_id = cursor.lastrowid
except Exception as e:
# 有异常,回滚事务
conn.rollback()
cursor.close()
conn.close()
删
# 导入pymysql模块
import pymysql
# 连接database
conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
sql = "DELETE FROM USER1 WHERE id=%s;"
try:
cursor.execute(sql, [4])
# 提交事务
conn.commit()
except Exception as e:
# 有异常,回滚事务
conn.rollback()
cursor.close()
conn.close()
改
# 导入pymysql模块
import pymysql
# 连接database
conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
# 修改数据的SQL语句
sql = "UPDATE USER1 SET age=%s WHERE name=%s;"
username = "Alex"
age = 80
try:
# 执行SQL语句
cursor.execute(sql, [age, username])
# 提交事务
conn.commit()
except Exception as e:
# 有异常,回滚事务
conn.rollback()
cursor.close()
conn.close()
查
1. 查询单条数据
# 导入pymysql模块
import pymysql
# 连接database
conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
# 查询数据的SQL语句
sql = "SELECT id,name,age from USER1 WHERE id=1;"
# 执行SQL语句
cursor.execute(sql)
# 获取单条查询数据
ret = cursor.fetchone()
cursor.close()
conn.close()
# 打印下查询结果
print(ret)
2. 查询多条数据
# 导入pymysql模块
import pymysql
# 连接database
conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
# 查询数据的SQL语句
sql = "SELECT id,name,age from USER1;"
# 执行SQL语句
cursor.execute(sql)
# 获取多条查询数据
ret = cursor.fetchall()
cursor.close()
conn.close()
# 打印下查询结果
print(ret)
查询时移动光标
1. 可以获取指定数量的数据
cursor.fetchmany(3)
2. 光标按绝对位置移动1
cursor.scroll(1, mode=”absolute”)
3. 光标按照相对位置(当前位置)移动1
cursor.scroll(1, mode=”relative”)