Python操作mysql数据库
python操作mysql数据库,需要使用第三库:pymysql
一、mysql安装
官网:https://www.mysql.com/
二、安装pymysql
pip install PyMySql -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
三、使用
代码演示:
import pymysql
conn = pymysql.connect(host="localhost",
user ="student",
password="student",
database="studentmanagementsystem",
port=3306,
charset="utf-8")
#获取游标对象
cursor =conn.cursor()
#执行
sql = "select * from student"
cursor.execute(sql)
#关闭数据库连接和游标
cursor.close()
conn.close()
1. 导包
import pymysql
2. 创建数据库连接
conn = pymysql.connect(host="localhost",
user ="student",
password="student",
database="studentmanagementsystem",
port=3306,
charset="utf-8")
说明:
- host : 数据库服务器连接地址
- user : 登录用户名
- password : 密码
- database : 要连接的数据库名称
- port : 数据库连接断开(默认值3306)
- charset :字符集(设置为utf-8)
- autocommit :是否自动提交
- True:自动提交
- False:手动提交
3. 获取游标对象
cursor = conn.cursor()
说明
-
- 调用数据库连接对象的cursor()方法获取游标对象
4. 执行增删改查操作
sql = "select * from student"
cursor.execute(sql)
说明
- 调用游标对象的execute()方法来执行SQL语句
- sql:要执行的sql语句
查询
- 返回查询到的第一个结果
result1 = cursor.fetchone()
print(f"查询到的第一个结果:{result1}")
-
查询返回的结果数可以通过size指定,默认返回第一个查询结果,返回值:
((),())
result2 = cursor.fetchmany(size=2); print(f"查询2 行的数据:{result2}")
-
获取结果集中所有行的数据,返回值为:
((),(),..)
result3=cursor.fetchall() print(f"查询全部数据:{result3}")
-
获取结果集中的总记录数:
rowcount
count = cursor.rowcount print(f"student表中有{count}条数据")
增删改
思路
1.导包
try:
程序前期,需要执行的代码
2.创建连接对象
3.获取游标对象
4.执行sql
+ 在图书表中插入一行数据
+ 主动抛出异常
+ 在英雄人物表中插入一行数据
调用提交事务:conn.commit()
except:
程序出现异常后,处理代码
调用事务回滚:conn.rollback()
finally:
程序结束时,需要执行的代码
5.关闭游标
6.关闭连接
操作
- 自动提交(不推荐):
autocommit = True
- 手动提交(推荐):
- 提交事务:
conn.commit()
- 回滚事务:
conn.rollback
- 提交事务:
示例代码
# 1. 导包
import pymysql
# 2. 创建数据库连接
conn = pymysql.connect(host="localhost",
user ="student",
password="student",
database="studentmanagementsystem",
port=3306)
cursor = conn.cursor()
try:
#这里sql可以是update,insert,delete语句
sql = "UPDATE student SET stu_name='ccx330' where stu_id ='00006'";
print(sql)
cursor.execute(sql)
# 提交事务
conn.commit()
print(cursor.rowcount)
except Exception as e:
#回滚事务
conn.rollback()
raise e
finally:
cursor.close()
conn.close()
四、封装工具类
一般数据库信息会单独放在一个地方
- 单独的py文件
- 存储在环境变量中
#config.py
__config = {
"host":"127.0.0.1",
"user":"student",
"password":"student",
"database":"studentmanagementsystem",
"port":3306,
"charset":"utf8"
}
config = __config
封装数据库文件
#db_funs.py
#导包
from config import config
class DButils(object):
#初始化
__conn = None
_cursour=None
#DB_utils.py
import logging
import pymysql
from Python.python_SQL.config import config
class DButils():
def __init__(self):
self.__conn=None
self.__cursor = None
#创建连接
def __get_conn(self):
if self.__conn is None:
self.__conn=pymysql.connect(**config)
return self.__conn
#获取游标
def __get_cursor(self):
if self.__cursor is None:
self.__cursor = self.__get_conn().cursor()
return self.__cursor
#执行sql
def exec_sql(self,sql):
try:
#获取游标对象
cursor = self.__get_cursor()
# 调用游标对象的execute方法,执行sql
cursor.execute(sql)
# sql = "select * from xxx" # sql = "update delete insert"
# 如果是查询
if sql.split()[0].lower() == "select": # sql语句中的第一个元素是不是select
# 返回所有数据
return cursor.fetchall()
# 否则:
else:
# 提交事务
self.__conn.commit()
# 返回受影响的行数
return cursor.rowcount # 增删改返回的的影响行数rowcount
pass
except Exception as e:
self.__conn.rollback()
# 打印异常信息
print(e)
logging.info("数据库异常:{}".format(e))
finally:
self.__close_cursor()
self.__close_conn()
# 关闭游标
def __close_cursor(self):
if self.__cursor:
self.__cursor.close()
self.__cursor= None
#关闭数据库
def __close_conn(self):
if self.__conn:
self.__conn.close()
self.__conn= None
测试
#main.py
from Python.python_SQL.DB_utils import DButils
if __name__ == '__main__':
print("测试pyhon操作数据库")
db = DButils()
#查询
sql = "select * from student"
print(db.exec_sql(sql))
#
sql1 = "INSERT INTO student " \
" VALUES " \
"('00011','莫彬', 0,'2005-08-11', '黑龙江省', '15604653586', '云南省南京市崇文黄路Q座 671564','201149', 'juanmeng@example.org', '发布')"
print(db.exec_sql(sql1))
sql = "select * from student"
print(db.exec_sql(sql))
注意:DButils类所在位置哈