-
未利用数据库连接池
import pymysql db = pymysql.connect(host='127.0.0.1',user='root',port=3306,password='111111',db='test') cursor = db.cursor() # 创建字典游标:cursor = db.cursor(pymysql.cursors.DictCursor) sql = "insert into user({key},regist_date) values('{value}',{regist_date})".format(key=keys, value=values, regist_date='NOW()') res = cursor.execute(sql) # res为影响行数,此处为1;查询时为查询到的行数 db.commit() # 增加、删除、修改需要commit()提交,且当异常时使用 db.rollback() 回滚 ; 查询时不需要提交 return res
查询时:
sql = "select......" cursor.execute(sql) res = cursor.fetchall() # 获得全部数据 # res = cursor.fetchone() # 获得第一条数据 return res
-
利用数据库连接池
安装 DBUtils
pip install DBUtilsapp / config.py:
db_config = { "host":"127.0.0.1", # 主机地址 "user":"root", # 数据库用户名 "password":"123456", # 数据库密码 "port":3306, # 端口 "database":"job_app" # 数据库名 }
dao / init.py:
import pymysql from DBUtils.PooledDB import PooledDB, SharedDBConnection from app.config import db_config POOL = PooledDB( # 使用链接数据库的模块 creator=pymysql, # 连接池允许的最大连接数,0和None表示不限制连接数 maxconnections=6, # 初始化时,链接池中至少创建的空闲的链接,0表示不创建 mincached=2, # 链接池中最多闲置的链接,0和None不限制 maxcached=5, # 链接池中最多共享的链接数量,0和None表示全部共享。 # 因为pymysql和MySQLdb等模块的 threadsafety都为1, # 所有值无论设置为多少,maxcached永远为0,所以永远是所有链接都共享。 maxshared=3, # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错 blocking=True, # 一个链接最多被重复使用的次数,None表示无限制 maxusage=None, # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."] setsession=[], # ping MySQL服务端,检查是否服务可用。 # 如:0 = None = never, 1 = default = whenever it is requested, # 2 = when a cursor is created, 4 = when a query is executed, 7 = always ping=0, host=db_config["host"], # 主机地址 user=db_config["user"], # 数据库用户名 password=db_config["password"], # 数据库密码 port=db_config["port"],# 端口 database=db_config["database"],# 数据库名 # 字符编码 charset='utf8' )
-
利用Python在dao里新建表
def create_table_mysql(): from app.dao.__init__ import POOL db = POOL.connection() cursor = db.cursor() sql = "create table create_table_mysql(" \ "id int primary key, " \ "name varchar(255) not null, " \ "birthday datetime" \ ")" res = cursor.execute(sql) print(res)
-
利用Python在dao里调用存储过程
def call_procedure_mysql(): import pymysql db = pymysql.connect(host='127.0.0.1',user='root',port=3306,password='123456',db='school2') cursor = db.cursor() name = '李大奎' c = 'c' sql = "call pro_getGrade('{name}','{c}',@r)".format(name=name,c=c) cursor.execute(sql) # cursor.execute('select @r') res = cursor.fetchall() print(res) db.close()
-
数据库操作是原子性的。
-
数据库连接db事务自动begin
即 insert、update、delete时,进行异常处理需要:
try: ..... db.commit() return res exception Exception as ex: print(ex) if db: db.rollback() finally: if db: db.close()
当进行 select 时,则不需要:
try: ..... return res exception Exception as ex: print(ex) finally: if db: db.close()
-
sql 语句
insert - - - 将key、value组合成字符串,进行不定长插入,注意:’{value}’ 的引号,因为是字符串
keys = ','.join(list(user.keys())) values = "','".join(list(user.values())) sql = "insert into user({key},regist_date) values('{value}',{regist_date})".format(key=keys, value=values, regist_date='NOW()')
update - - - 将 set 语句对应的 key和value 从参数dict_info 中获取出来,连接成字符串,注意:id 是int类型,不需要’{id}'
id = dict_info["id"] dict_info.pop("id") set_item = list(i[0] + " = '" + i[1] + "'" for i in list(dict_info.items())) set_str = ",".join(set_item) sql = "update table_name set {set_str} where id = {id}".format(set_str=set_str, id=id)
select - - - 将where 语句 对应的key 和value从参数中取出,连接成字符串
item = list(i[0] + " = '" + i[1] + "'" for i in list(conditions.items())) cds = ' and '.join(item) sql = "select * from table_name where {conditions}".format(conditions=cds)
-
自动增长的序列,获得其值:
id=connect.insert_id() print(connect.affected_rows())
Flask学习-5-mysql基础
最新推荐文章于 2025-06-14 21:32:42 发布
