最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

1. 安裝

安裝SQLAlchemy

pip install SQLAlchemy

在這里插入圖片描述

安裝mysql

pip install pymysql

在這里插入圖片描述

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

示例:

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 查詢時(shí)會(huì)輸出所有 SQL 語(yǔ)句及其參數(shù)到控制臺(tái),方便調(diào)試。

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

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

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

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

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ù)庫(kù)引擎
"""
echo=True: 這表示在執(zhí)行 SQL 查詢時(shí)會(huì)輸出所有 SQL 語(yǔ)句及其參數(shù)到控制臺(tái),方便調(diào)試。

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

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

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

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

Base = declarative_base()

# 設(shè)置會(huì)話
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='序列號(hào)')
    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)建時(shí)間')

    __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')


測(cè)試:

在這里插入圖片描述

在這里插入圖片描述

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

相關(guān)文章

  • python使用Streamlit庫(kù)制作Web可視化頁(yè)面

    python使用Streamlit庫(kù)制作Web可視化頁(yè)面

    一談到Web頁(yè)面,可能大家首先想到就是HTML,CSS或JavaScript。 本次小F就給大家介紹一下如何用Python制作一個(gè)數(shù)據(jù)可視化網(wǎng)頁(yè),使用到的是Streamlit庫(kù)。輕松的將一個(gè)Excel數(shù)據(jù)文件轉(zhuǎn)換為一個(gè)Web頁(yè)面,提供給所有人在線查看。
    2021-05-05
  • Python繪圖工具使用Matplotlib、Seaborn和Pyecharts繪制散點(diǎn)圖詳解

    Python繪圖工具使用Matplotlib、Seaborn和Pyecharts繪制散點(diǎn)圖詳解

    這篇文章主要介紹了Python繪圖工具使用Matplotlib、Seaborn和Pyecharts繪制散點(diǎn)圖的相關(guān)資料,每種庫(kù)都有其特點(diǎn)和適用場(chǎng)景,通過(guò)實(shí)際操作,學(xué)習(xí)如何使用這些庫(kù)繪制散點(diǎn)圖,并比較它們的優(yōu)缺點(diǎn),需要的朋友可以參考下
    2026-01-01
  • python列表插入append(), extend(), insert()用法詳解

    python列表插入append(), extend(), insert()用法詳解

    在本篇文章里小編給大家整理了關(guān)于python列表插入append(), extend(), insert()用法以及相關(guān)知識(shí)點(diǎn),有需要的朋友們參考下。
    2019-09-09
  • Python3.12內(nèi)置的71個(gè)函數(shù)匯總(按用途分類)

    Python3.12內(nèi)置的71個(gè)函數(shù)匯總(按用途分類)

    Python 的強(qiáng)大之處在于它自帶了豐富的工具箱,截至 Python 3.12 版本,官方提供了 71 個(gè)內(nèi)置函數(shù),這些函數(shù)無(wú)需 import 任何模塊即可直接使用,為了方便查閱和記憶,本文將這 71 個(gè)函數(shù)按功能分類
    2026-01-01
  • python數(shù)組和矩陣的用法解讀

    python數(shù)組和矩陣的用法解讀

    這篇文章主要介紹了python數(shù)組和矩陣的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Python中pandas庫(kù)sort_values()方法的使用

    Python中pandas庫(kù)sort_values()方法的使用

    最后去看了有關(guān)于 sort_values 的文檔,成功解決先把單詞出現(xiàn)頻次由高往低依次排序,再把頻次相同的情況下的單詞按照 MD5 值排序這個(gè)問(wèn)題,下面通過(guò)本文講解下Python中pandas庫(kù)sort_values()方法的使用,感興趣的朋友一起看看吧
    2023-07-07
  • Python標(biāo)準(zhǔn)庫(kù)之time庫(kù)的使用教程詳解

    Python標(biāo)準(zhǔn)庫(kù)之time庫(kù)的使用教程詳解

    這篇文章主要介紹了Python的time庫(kù)的使用教程,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2022-04-04
  • python簡(jiǎn)單文本處理的方法

    python簡(jiǎn)單文本處理的方法

    這篇文章主要介紹了python簡(jiǎn)單文本處理的方法,涉及Python針對(duì)文本文件及字符串操作的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • python排序算法之歸并排序

    python排序算法之歸并排序

    這篇文章主要介紹了python排序算法之歸并排序,歸并排序算法就是一個(gè)先把數(shù)列拆分為子數(shù)列,對(duì)子數(shù)列進(jìn)行排序后,再把有序的子數(shù)列合并為完整的有序數(shù)列的算法,需要的朋友可以參考下
    2023-04-04
  • Python輕松實(shí)現(xiàn)查找高亮Excel指定數(shù)據(jù)

    Python輕松實(shí)現(xiàn)查找高亮Excel指定數(shù)據(jù)

    在日常工作中,Excel表格無(wú)疑是我們處理數(shù)據(jù)最常用的工具之一,本文將深入探討如何利用 Free Spire.XLS for Python 免費(fèi)庫(kù)完成這一任務(wù),讓你的數(shù)據(jù)處理工作效率倍增,希望對(duì)大家有所幫助
    2025-11-11

最新評(píng)論

交城县| 沅陵县| 山东| 赞皇县| 定远县| 武平县| 石首市| 苏尼特左旗| 嵩明县| 凤台县| 琼海市| 贡觉县| 喀喇| 进贤县| 门头沟区| 门源| 张家港市| 肃宁县| 唐山市| 田林县| 巴林右旗| 两当县| 武宣县| 荥经县| 赤峰市| 洪泽县| 仁化县| 乐昌市| 迁西县| 繁昌县| 西青区| 长岭县| 新化县| 宁陕县| 砀山县| 遂昌县| 峡江县| 许昌市| 专栏| 景宁| 博乐市|