欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python SQLAlchemy 數(shù)據(jù)庫連接池的實現(xiàn)

 更新時間:2025年03月31日 09:48:03   作者:栗子~~  
SSQLAlchemy提供了強(qiáng)大的連接池和連接管理功能,可以有效地管理數(shù)據(jù)庫連接,本文主要介紹了python SQLAlchemy 數(shù)據(jù)庫連接池的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下

SQLALchemy 鏈接數(shù)據(jù)庫使用數(shù)據(jù)庫連接池技術(shù),原理是在系統(tǒng)初始化的時候,將數(shù)據(jù)庫連接作為對象存儲在內(nèi)存中,當(dāng)用戶需要訪問數(shù)據(jù)庫時,并非建立一個新的鏈接,而是從鏈接池中取出一個已建立的空閑鏈接對象。使用完畢后,用戶也并非將連接關(guān)閉,而是將連接放回連接池中,以供下一個請求訪問使用。而鏈接的建立,斷開都由鏈接池來管理,同時,還可以通過設(shè)置鏈接池的參數(shù)來控制鏈接池中的初始鏈接數(shù),鏈接的上下限數(shù)以及每個鏈接的最大使用次數(shù),最大空閑時間等。

1. 安裝

安裝SQLAlchemy

pip install SQLAlchemy

在這里插入圖片描述

安裝mysql

pip install pymysql

在這里插入圖片描述

2. 創(chuàng)建數(shù)據(jù)庫引擎

示例:

from sqlalchemy import create_engine

engine = create_engine(mysql_url, echo=True, pool_size=5, max_overflow=4, pool_recycle=7200, pool_timeout=30)

echo=True: 這表示在執(zhí)行 SQL 查詢時會輸出所有 SQL 語句及其參數(shù)到控制臺,方便調(diào)試。

pool_size=5: 這設(shè)置了數(shù)據(jù)庫連接池的大小為 5,表示在連接池中最多可以保持 5 個連接。

max_overflow=4: 這允許在需要時,連接池外再創(chuàng)建最多 4 個額外的連接,超出連接池大小的部分會在使用后關(guān)閉。

pool_recycle=7200: 這表示連接在 7200 秒(2 小時)后會被回收,避免因長時間連接而導(dǎo)致的問題(例如,MySQL 的“互動超時”)。

pool_timeout=30: 這是連接池的超時時間,表示如果在 30 秒內(nèi)沒有獲取到可用的連接,將會拋出異常。

3. 新建表,增刪改查demo

配置文件:

在這里插入圖片描述

sql.ini:

[datasource]
url = TESTDB:TESTDB@127.0.0.1:3306
db = TESTDB?charset=utf8

python demo:

from sqlalchemy import create_engine, Column, String, Integer, DateTime, Index, text
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import pathlib
import configparser

# 設(shè)置配置文件
current_dir = pathlib.Path(__file__).parent
config_file = current_dir / 'config' / 'sql.ini'
config = configparser.ConfigParser()
with open(config_file, 'r', encoding='utf-8') as f:
    config.read_file(f)

url = config['datasource']['url']
db = config['datasource']['db']

mysql_url = f'mysql+pymysql://{url}/{db}'
# 創(chuàng)建數(shù)據(jù)庫引擎
"""
echo=True: 這表示在執(zhí)行 SQL 查詢時會輸出所有 SQL 語句及其參數(shù)到控制臺,方便調(diào)試。

pool_size=5: 這設(shè)置了數(shù)據(jù)庫連接池的大小為 5,表示在連接池中最多可以保持 5 個連接。

max_overflow=4: 這允許在需要時,連接池外再創(chuàng)建最多 4 個額外的連接,超出連接池大小的部分會在使用后關(guān)閉。

pool_recycle=7200: 這表示連接在 7200 秒(2 小時)后會被回收,避免因長時間連接而導(dǎo)致的問題(例如,MySQL 的“互動超時”)。

pool_timeout=30: 這是連接池的超時時間,表示如果在 30 秒內(nèi)沒有獲取到可用的連接,將會拋出異常。
"""
engine = create_engine(mysql_url, echo=True, pool_size=5, max_overflow=4, pool_recycle=7200, pool_timeout=30)

Base = declarative_base()

# 設(shè)置會話
Session = sessionmaker(bind=engine)
session = Session()


# 表結(jié)構(gòu)
class YzyTest(Base):
    __tablename__ = 't_yzy_test'

    SEQUENCE_NO = Column(Integer, primary_key=True, autoincrement=True, comment='序列號')
    PK_STD_POINT_AI_RELATION = Column(String(36), unique=True, nullable=False, comment='id')
    FK_STD_AUDIT_POINT = Column(String(36), nullable=False, comment='審核標(biāo)準(zhǔn)id')
    FK_AI_STD = Column(String(36), nullable=False, comment='aiId')
    CHANNEL_TAG = Column(String(45), nullable=False, comment='渠道')
    FK_USER_CREATE = Column(String(36), nullable=True, comment='創(chuàng)建人id')
    USER_NAME_CREATE = Column(String(64), nullable=True, comment='創(chuàng)建人姓名')
    CREATE_TIME = Column(DateTime, default=text('CURRENT_TIMESTAMP'), nullable=False, comment='創(chuàng)建時間')

    __table_args__ = (
        Index('u_t_yzy_test_01', 'FK_STD_AUDIT_POINT', 'FK_AI_STD', 'CHANNEL_TAG', unique=True),
    )


# 創(chuàng)建表
def create_table():
    Base.metadata.create_all(engine)


# 查詢數(shù)據(jù)
def query():
    return session.query(YzyTest).all()


# 插入數(shù)據(jù)
def save(param):
    session.add(param)
    session.commit()


# 更新數(shù)據(jù)
def update(param_id, updated_data):
    param = session.query(YzyTest).filter(YzyTest.PK_STD_POINT_AI_RELATION == param_id).first()
    if param:
        for key, value in updated_data.items():
            setattr(param, key, value)
        session.commit()


# 刪除數(shù)據(jù)
def delete(param_id):
    param = session.query(YzyTest).filter(YzyTest.PK_STD_POINT_AI_RELATION == param_id).first()
    if param:
        session.delete(param)
        session.commit()


if __name__ == '__main__':
    create_table()

    # 示例用法:
    new_param = YzyTest(
        PK_STD_POINT_AI_RELATION='unique-id-1',
        FK_STD_AUDIT_POINT='audit-point-id',
        FK_AI_STD='ai-id',
        CHANNEL_TAG='channel-tag-example',
        USER_NAME_CREATE='創(chuàng)建者姓名'
    )
    save(new_param)

    params = query()
    for param in params:
        print(param.PK_STD_POINT_AI_RELATION, param.FK_STD_AUDIT_POINT, param.FK_AI_STD, param.CHANNEL_TAG, param.USER_NAME_CREATE)

    update('unique-id-1', {'CHANNEL_TAG': 'new_channel_tag'})
    params = query()
    for param in params:
        print(param.PK_STD_POINT_AI_RELATION, param.FK_STD_AUDIT_POINT, param.FK_AI_STD, param.CHANNEL_TAG, param.USER_NAME_CREATE)

    delete('unique-id-1')


測試:

在這里插入圖片描述

在這里插入圖片描述

到此這篇關(guān)于python SQLAlchemy 數(shù)據(jù)庫連接池的實現(xiàn)的文章就介紹到這了,更多相關(guān)python SQLAlchemy連接池內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • C3 線性化算法與 MRO之Python中的多繼承

    C3 線性化算法與 MRO之Python中的多繼承

    Python 中的方法解析順序(Method Resolution Order, MRO)定義了多繼承存在時 Python 解釋器查找函數(shù)解析的正確方式。這篇文章給大家介紹了Python中的多繼承,感興趣的朋友一起看看吧
    2021-10-10
  • 使用Python簡單實現(xiàn)去除彩色水印

    使用Python簡單實現(xiàn)去除彩色水印

    這篇文章主要為大家詳細(xì)介紹了如何使用Python簡單實現(xiàn)去除彩色水印效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • json 轉(zhuǎn) mot17數(shù)據(jù)格式的實現(xiàn)代碼 (親測有效)

    json 轉(zhuǎn) mot17數(shù)據(jù)格式的實現(xiàn)代碼 (親測有效)

    這篇文章主要介紹了json 轉(zhuǎn) mot17數(shù)據(jù)格式的實現(xiàn)代碼 (親測有效),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 在NumPy中創(chuàng)建空數(shù)組/矩陣的方法

    在NumPy中創(chuàng)建空數(shù)組/矩陣的方法

    今天小編就為大家分享一篇在NumPy中創(chuàng)建空數(shù)組/矩陣的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python OpenCV視頻截取并保存實現(xiàn)代碼

    Python OpenCV視頻截取并保存實現(xiàn)代碼

    這篇文章主要介紹了Python OpenCV視頻截取并保存實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • 對numpy 數(shù)組和矩陣的乘法的進(jìn)一步理解

    對numpy 數(shù)組和矩陣的乘法的進(jìn)一步理解

    下面小編就為大家分享一篇對numpy 數(shù)組和矩陣的乘法的進(jìn)一步理解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • numpy中軸處理的實現(xiàn)

    numpy中軸處理的實現(xiàn)

    本文主要介紹了numpy中軸處理的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 詳解Python中的日志模塊logging

    詳解Python中的日志模塊logging

    這篇文章主要介紹了Python中的日志模塊logging,包括Python下的日志級別以及模塊內(nèi)常用方法的使用,需要的朋友可以參考下
    2015-06-06
  • 利用Python爬取微博數(shù)據(jù)生成詞云圖片實例代碼

    利用Python爬取微博數(shù)據(jù)生成詞云圖片實例代碼

    這篇文章主要給大家介紹了關(guān)于利用Python爬取微博數(shù)據(jù)生成詞云圖片的相關(guān)資料,文中通過示例代碼介紹非常詳細(xì),對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • python爬蟲 正則表達(dá)式使用技巧及爬取個人博客的實例講解

    python爬蟲 正則表達(dá)式使用技巧及爬取個人博客的實例講解

    下面小編就為大家?guī)硪黄猵ython爬蟲 正則表達(dá)式使用技巧及爬取個人博客的實例講解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10

最新評論