Python sqlite3数据库连接池精简设计

环境需求:需要sqlite3和数据库连接池的第三方库DBUtils。

读懂代码你需要了解:

1.单例设计模式

2.Python上下文管理器

模板代码:

from dbutils.persistent_db import PersistentDB
import sqlite3


class Pool(object):       # 数据库连接池
    __pool = None     # 记录第一个被创建的对象引用
    config = {
        'database': 'D:/software/SQLite3/mySQLite.sqlite3'  # 数据库文件路径
    }

    def __new__(cls, *args, **kwargs):
        """创建连接池对象  单例设计模式(每个线程中只创建一个连接池对象)  PersistentDB为每个线程提供专用的连接池"""
        if cls.__pool is None:    # 如果__pool为空,说明创建的是第一个连接池对象
            cls.__pool = PersistentDB(sqlite3, maxusage=None, closeable=False, **cls.config)
        return cls.__pool


class Connect:
    def __enter__(self):
        """自动从连接池中取出一个连接"""
        db_pool = Pool()
        self.conn = db_pool.connection()
        self.cur = self.conn.cursor()
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        """自动释放当前连接资源 归还给连接池"""
        self.cur.close()
        self.conn.close()


# 查询一条数据
def find_one(table, data):
    sql = 'select * from ' + table + ' where ip=?'
    with Connect() as db:   # 从连接池中取出一个连接
        db.cur.execute(sql, (data,))    # sqlite用元组接受字符串
        result = db.cur.fetchone()
    return result[0]


# 插入一条数据
def insert_one(table, data):
    sql = 'insert or ignore into ' + table + '(ip) values(?)'  # 不重复插入
    with Connect() as db:
        db.cur.execute(sql, (data,))
        db.conn.commit()


# 删除一条数据
def delete_one(table, data):
    sql = 'delete from ' + table + ' where ip=?'
    with Connect() as db:
        db.cur.execute(sql, (data,))
        db.conn.commit()


"""
SQLite 由于线程安全机制 不支持 PooledDB 线程共享连接模式   故使用PersistentDB 线程专用连接模式 为每个线程单独开连接池
SQLite 只支持读并发 即:写独占,读共享,所以要在修改操作时使用互斥锁。 为了体现精简性,这里就不演示了
PooledDB()中的参数解释自行查找
"""

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: Python SQLite3数据库教程 SQLite3是一种轻量级的数据库,它可以在Python中使用。以下是Python SQLite3数据库教程的一些重点: 1. 导入SQLite3模块 要使用SQLite3,您需要导入Python中的sqlite3模块。您可以使用以下代码导入它: import sqlite3 2. 连接到数据库 要连接到SQLite3数据库,您需要使用connect()方法。以下是一个示例: conn = sqlite3.connect('example.db') 在这个例子中,我们连接到名为example.db的数据库。如果该数据库不存在,则会创建 ### 回答2: Python是一门高级编程语言,常用于数据处理、Web开发等方面。在Python中,sqlite3是一个轻量级的数据库,它用于存储数据并提供查询、更新等操作。使用sqlite3可以方便地存储和处理数据,这对于开发数据库驱动的应用程序非常有用。 在使用Python中的sqlite3之前,需要先引入sqlite3库。我们可以通过以下代码来创建一个数据库连接: ```python import sqlite3 conn = sqlite3.connect('example.db') ``` 其中,sqlite3.connect()方法用于创建一个连接到文件example.db的数据库。如果不存在该文件,该方法将会自动创建它。 接下来,我们可以通过创建一个Cursor对象来执行SQL语句。例如,我们可以通过以下代码来创建一张表: ```python import sqlite3 conn = sqlite3.connect('example.db') c = conn.cursor() c.execute('''CREATE TABLE stocks (date text, trans text, symbol text, qty real, price real)''') ``` 运行上述代码后,将在example.db数据库中创建一张名为“stocks”的表。表中包含了5个列,分别为date、trans、symbol、qty和price。 接下来,我们可以通过insert语句向“stocks”表中添加一条数据: ```python import sqlite3 conn = sqlite3.connect('example.db') c = conn.cursor() c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)") conn.commit() ``` 在此,我们通过execute()方法向“stocks”表中插入了一条记录。此时,我们需要调用commit()方法以提交更改,否则更改将不会被保存到数据库中。 除此之外,我们还可以通过select语句查询数据。以下是一个示例代码: ```python import sqlite3 conn = sqlite3.connect('example.db') c = conn.cursor() for row in c.execute('SELECT * FROM stocks ORDER BY price'): print(row) ``` 以上代码中,我们通过execute()方法执行了一条查询语句,查询了“stocks”表中的所有记录并按price字段进行排序。然后,我们使用循环遍历返回的结果,输出每一行记录。 总的来说,Python sqlite3库是一个非常实用的工具,它方便了我们存储和处理数据。使用该库,可以轻松地创建表格和索引、插入和查询数据等操作。如果你想要使用Python进行和sqlite3的交互,请参考以上代码实现,并在实践中不断探索。 ### 回答3: Python sqlite3数据库模块是Python自带的一个标准库,通过该模块可以方便地使用sqlite3数据库sqlite3是一种轻型的数据库,可以在各种操作系统上运行,数据保存在本地,提供了可靠的数据存储和查询功能。 使用Python sqlite3模块前,需要先安装sqlite3数据库,并且创建一个数据库文件。打开命令行终端,输入sqlite3命令进入sqlite3控制台,然后输入命令创建数据库文件: ``` $ sqlite3 example.db SQLite version 3.11.0 2016-02-15 17:29:24 Enter ".help" for usage hints. sqlite> .quit ``` 接下来使用Python sqlite3模块连接该数据库文件,并创建一个表格: ```python import sqlite3 conn = sqlite3.connect('example.db') c = conn.cursor() # 创建一个表格 c.execute('''CREATE TABLE stocks (date text, trans text, symbol text, qty real, price real)''') # 插入数据 c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)") # 提交事务 conn.commit() # 关闭连接 conn.close() ``` 在上面的示例中,首先使用connect()函数连接了example.db数据库文件。使用cursor()函数创建一个游标对象,用于执行SQL语句。接着使用execute()函数执行了CREATE TABLE语句,创建一个名为stocks的表格,包括date、trans、symbol、qty和price五个属性。然后执行了一个INSERT语句,将一条数据插入到表格中。最后使用commit()函数提交事务,将修改保存到数据库,并使用close()函数关闭连接。 除了CREATE TABLE和INSERT语句,sqlite3模块还提供许多其他的SQL操作函数,如UPDATE、DELETE、SELECT等。此外,还可以使用executemany()函数一次性执行多个SQL语句,如: ```python # 插入多个数据 data = [('2006-01-05','BUY','RHAT',100,35.14), ('2006-02-05','SELL','IBM',50,55.14), ('2006-03-15','BUY','GOOG',200,280.14)] c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', data) ``` 在这个示例中,data是一个包含多条数据的列表,使用executemany()函数可以一次性执行多个INSERT语句。其中的?号是SQL语句中的占位符,可以用元组或列表来代替。 Python sqlite3模块还提供了很多其他的函数和方法,如fetchone()、fetchall()、execute_script()等,用于对数据库进行查询、更新和删除操作。 总的来说,Python sqlite3模块是一个很方便的数据库操作工具,使用简单、易学易用,可以方便地进行数据存储和查询。需要注意的是,sqlite3数据库是一种轻型数据库,不能与高性能的数据库比较。如果需要进行大规模的数据处理或并发操作,建议使用其他的数据库,如MySQL、PostgreSQL等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钢铁の洪流

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值