一、数据库分类
1、关系型数据库:MySQL、SQL server 、ora、DB2
2、非关系型数据库:Redis、MongoDB
二、Python操作数据库
pymysql:纯Python开发;支持2\3
三、安装
pip install pymysql
验证安装是否成功
pip show pymysql
四、操作流程
创建连接对象;
获取游标对象;
执行SQL语句;
查询:select
非查询:insert、update、delete
1、事务提交(连接对象.commit())
2、事务回滚(连接对象.rollback())
关闭游标;
关闭连接
五、查询数据库的版本信息
#获取数据库版本
select VERSION()
六、打开pycharm,创建一个Python.file 文件
1、连接数据库
备注:以下部分数据有写成xxx,可以替换成响应数据值
#导包
import pymysql
# 创建连接对象
conn=pymysql.connect(host='xxx',
port=3306,
user='root',
password='XXX@@',
database='xxx_one'
)
# 获取游标对象;
cursor=conn.cursor()
# 执行SQL语句;
cursor.execute('select version()')
result=cursor.fetchall()
print(result)
# 关闭游标;
cursor.close()
# 关闭连接
conn.close()
2、什么是游标
2、查询数据并获取结果
# 执行SQL语句;
sql1="SELECT* FROM`xxx`.t_user GROUP BY create_time desc LIMIT 3 "
cursor.execute(sql1)
#获取查询记录的行数
print('获取查询记录的行数为:',cursor.rowcount)
#获取查询结果的第一条数据
print('获取查询结果的第一条数据为:',cursor.fetchone())
#获取全部查询结果
#指定游标位置
cursor.rownumber=0
print('获取全部查询结果为:',cursor.fetchall())
重置游标的位置
#指定游标位置
cursor.rownumber=0
3、插入(insert)数据(update、delete是一模一样,只需要更改SQL语句即可)
插入数据首先需要加入新的参数,autocommit;然后再执行内存里面之前执行成功的SQL
#导包
import pymysql
# 创建连接对象
conn=pymysql.connect(host='xxx',
port=3306,
user='root',
password='xxx',
database='xxx',
autocommit=True
)
# 获取游标对象;
cursor=conn.cursor()
# 执行SQL语句;
cursor.execute("INSERT INTO `xxx`.`t_sms_record`(`id`, `app_id`, `mobile`, `content`, `type`, `status`, `create_time`, `update_time`, `channel`, `template_code`, `back_fill`) VALUES (199997, 'one', '1234500034', 'préstamo.', 'SYS', '0', '2023-07-24 13:00:00', '2023-02-14 13:00:01', 'MSGBIRD', 'TODAY_REPAYMENT_SMS', NULL);")
#获取受影响的行数
print('获取查询记录的行数为:',cursor.rowcount)
# 关闭游标;
cursor.close()
# 关闭连接
conn.close()
4、数据库的事务
事务的特征
出现异常后的处理方法,按照以下流程图处理
按照流程图写入代码
#导包
import pymysql
#业务处理
#初始化
conn=None
cursor=None
# 创建连接对象
try:
conn=pymysql.connect(host='xxx',
port=3306,
user='root',
password='xxx',
database='xxx',
autocommit=False
)
# 获取游标对象;
cursor=conn.cursor()
# 执行SQL语句;
sql1="DELETE FROM `xxx`.`t_sms_record` WHERE `id` = 111311"
cursor.execute(sql1)
print('获取更新记录的行数为:',cursor.rowcount)
#主动抛出异常
#raise Exception("程序异常啦。。。。。。")
sql2="DELETE FROM `xxx`.`t_sms_record` WHERE `id` = 199997"
cursor.execute(sql2)
print('获取更新记录的行数为:',cursor.rowcount)
#提交事务
conn.commit()
except Exception as e :
#回滚数据
conn.rollback()
#打印异常信息
print(e)
finally:
#关闭游标
if cursor:
cursor.close()
#关闭连接
if conn:
conn.close()