- 在Flask中如何实现连接数据?
答:使用pymysql
以上连接方式存在两个问题:
a. 是否每次操作都要连接一次数据?
import pymysql
import threading
CONN = pymysql.connect(host='127.0.0.1',
port=3306,
user='root',
password='123',
database='pooldb',
charset='utf8')
def task(arg):
cursor = CONN.cursor()
cursor.execute('select * from tb1')
result = cursor.fetchall()
cursor.close()
print(result)
for i in range(10):
t = threading.Thread(target=task, args=(i,))
t.start()
b.多线程使用同一个连接时,会发生问题,需要添加锁。但是加了锁之后,又会排队,其他就需要等待了。
import pymysql
import threading
from threading import RLock
LOCK = RLock()
CONN = pymysql.connect(host='127.0.0.1',
port=3306,
user='root',
password='123',
database='pooldb',
charset='utf8')
def task(arg):
with LOCK:
cursor = CONN.cursor()
cursor.execute('select * from tb1')
result = cursor.fetchall()
cursor.close()
print(result)
for i in range(10):
t = threading.Thread(target=task, args=(i,))
t.start()
- 如何才能解决呢?那就是使用连接池了。
数据库连接池:本质上就是创建一些连接放到“连接池”中,当需要使用连接时,就去“连接池”中获取,如果使用完毕后,再将连接返回到连接池,以便于其他人重复使用。