1. 在Flask中如何实现连接数据?
    答:使用pymysql
  1. 以上连接方式存在两个问题:

    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()
  1. 如何才能解决呢?那就是使用连接池了。

数据库连接池:本质上就是创建一些连接放到“连接池”中,当需要使用连接时,就去“连接池”中获取,如果使用完毕后,再将连接返回到连接池,以便于其他人重复使用。

results matching ""

    No results matching ""