30天Python基础(pymysql操作mysql)

⼀、pymysql操作mysql数据库

  • 安装pymysql
pip install pymysql

1.1 pymysql操作数据库

  1. 连接数据库
    使⽤Connect⽅法连接数据库
pymysql.Connections.Connection(host=None, user=None, password='',
database=None, port=0, charset='')
参数说明:
 host – 数据库服务器所在的主机。
 user – 登录⽤户名。
 password – 登录⽤户密码。
 database – 连接的数据库。
 port – 数据库开放的端⼝。(默认: 3306)
 charset – 连接字符集。
返回值:
 返回连接对象
 
例⼦:
link = pymysql.Connect(host='localhost', port=3306, user='root',
password='123456', db='zzl', charset='utf8')
  • 连接对象⽅法
方法 说明
begin() 开启事务
commit() 提交事务
cursor(cursor=None) 创建⼀个游标⽤来执⾏sql语句
rollback() 回滚事务
close() 关闭连接
select_db(db) 选择数据库
set_charset(charset) 设置字符集
  1. 创建游标
cursor = link.cursor() 
cursor=pymysql.Cursors.DictCursor() #[{}]
print(cursor.rowcount) #打印受影响⾏数

⽅法 说明

close() 关闭游标
execute(query,args=None) 执⾏单条语句,传⼊需要执⾏的语句,是string类型;同时可以给查询传⼊参数,参数可以是tuple、list或dict。执⾏完成后,会返回执⾏语句的影响⾏数。
fetchone() 取⼀条数据
fetchmany(n) 取多条数据
fetchall() 取所有数据
_executed属性 正在执⾏的sql语句
lastrowid 获取新插⼊记录⾃增主键值
  1. 执⾏sql语句
# 执⾏sql语句
sql = 'select * from user1'
# 执⾏完sql语句,返回受影响的⾏数
num = cursor.execute(sql)
  1. 获取结果集
result1 = cursor.fetchone()
print(result1)
  1. 关闭连接
cursor.close()
link.close()

1.2 pymysql中事务处理
pymysql默认是没有开启⾃动提交事务,所以我们如果进⾏增、删、改,就必须⼿
动提交或回滚事务。

sql = 'delete from user where id=%s' % user_id
# 如果要执⾏增删改语句的时候,下⾯的就是固定格式
try:
 cursor.execute(sql)
 # 如果全部执⾏成功,提交事务
 link.commit()
 print(cursor.lastrowid) #获取最后插⼊记录的⾃增id号
except Exception as e:
 print(e)
 link.rollback()

1.3 防sql注⼊
pymysql.escape_string(str) 转移字符串中特殊字符(‘,“等)
cursor.execute(sql,参数),参数化,不要直接拼接sql字符串
⼆、封装数据库操作类
2.1.数据库操作类的封装
⼀个数据库model类对应⼀个表
数据库model类的核⼼是连贯操作和⽅法的⽆顺序调⽤

db.where('username="admin"').table('blog_user').field('username,p
assword').select()
# select usenrame,password from blog_user where username='admin'
# sql = "SELECT {fields} FROM {table} {where} {groupby} {having}
{orderby} {limit}".format()

2.2 连贯操作
⽅法要返回self
2.3 ⽅法的⽆顺序调⽤
在进⾏数据库查询时,不⽤考虑⽅法的先后顺序。
核⼼思想:
⽆论怎么调⽤,最终⽣成sql语句。
每调⽤⼀个⽅法,就⽣成对应sql⼦句
涉及到的技术点:字符串拼接
每次调⽤的最后必定是select、insert、update、delete,这些⽅法不返
回self
2.4 字段缓存
在查询语句中尽量不要出现*,我们可以将表的字段缓存的⽂件中,实例化数
据库model类时,加载缓存字段,如果不指定字段就使⽤缓存字段
也可以通过缓存字段过滤增删改时⽆效的字段
三、分⻚类
分⻚是通过解析url中page参数(可以⾃⼰指定),结合sql语句中limit⼦句,从数
据库中查询每个⻚⾯所需数据,具体可以分为以下步骤:
1) 获取总记录数
2)获取每⻚显示的记录个数
3)计算总⻚数:总记录数/每⻚记录个数,然后上取整
4)解析url获取当前⻚数
5)计算limit⼦句所需的偏移量: limit (当前⻚数-1)*每⻚记录个数,每⻚记录个数

你可能感兴趣的:(学习专栏)