最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

SQLAlchemy 的配置鏈接文件

2023-02-16 16:13 作者:攢錢換房車的福叔  | 我要投稿

以下為SQLAlchemy的配置文件,請勿直接復(fù)制,建議手敲,畢竟網(wǎng)頁復(fù)制會使得代碼變形。

Python可是非常注意代碼的格式的!

from sqlalchemy import Column,create_engine,MetaData,Table,func,event,exc

from sqlalchemy.orm import sessionmaker,scoped_session

from sqlalchemy.types import *

from sqlalchemy.ext.declarative import declarative_base

from urllib.parse import quote_plus

import os


# 數(shù)據(jù)庫配置

dbConfig = {

? ? "dbname":"數(shù)據(jù)庫名",

? ? "dbusername":"數(shù)據(jù)庫用戶名",

? ? "dbpasswd":"數(shù)據(jù)庫密碼",

? ? "dbhost":"數(shù)據(jù)庫地址",

? ? "dbport":3306,

? ? "dbcharset":"數(shù)據(jù)庫編碼格式"

}


base = declarative_base()


engine = create_engine(

? ? # 形成原則

? ? # mysql+pymysql://數(shù)據(jù)庫用戶名:數(shù)據(jù)庫密碼@服務(wù)器地址:端口號/數(shù)據(jù)庫名?charset=字符集

? ? # 如果密碼中帶了@ 這個特殊字符,需要將quote_plus 這個方法包裹字符串 或者

? ? "mysql+pymysql://fastapiblog:"+quote_plus('Abcd@123456')+"@localhost:3306/fastapi?charset=utf8mb4",

? ? # 數(shù)據(jù)庫連接池,默認(rèn)為5,建議調(diào)整是調(diào)整到CPU內(nèi)核數(shù)x2,因為調(diào)整到太大

? ? pool_size=10,

? ? # 這個入?yún)⑹菢?biāo)識是否打印SQL建議在開發(fā)環(huán)境開啟。

? ? echo=True,

? ? # MySQL 在默認(rèn)情況下鏈接8小時沒有任何操作,會自動斷開鏈接,此后會出現(xiàn)MySQL has gone away的錯誤。

? ? # 因此需要設(shè)置這個參數(shù)來回收鏈接。這個鏈接的單位是s也就是設(shè)置3000s之后,將會被sqlalchemy給回收。

? ? pool_recycle=3000,

? ? # 連接池ping,當(dāng)從連接池拿鏈接的時候,會向數(shù)據(jù)庫發(fā)送一個select 1(類似)的操作以確定是否數(shù)據(jù)庫是否存活。

? ? pool_pre_ping=True

)


metadata = MetaData(engine)

import datetime


@event.listens_for(engine, "connect")

def connect(dbapi_connection, connection_record):

? ? connection_record.info['pid'] = os.getpid()


@event.listens_for(engine, "checkout")

def checkout(dbapi_connection, connection_record, connection_proxy):

? ? pid = os.getpid()

? ? if connection_record.info['pid'] != pid:

? ? ? ? connection_record.connection = connection_proxy.connection = None

? ? ? ? raise exc.DisconnectionError(

? ? ? ? ? ? "Connection record belongs to pid %s, "

? ? ? ? ? ? "attempting to check out in pid %s" %

? ? ? ? ? ? (connection_record.info['pid'], pid)

? ? ? ? )


'''

請將表建在下方


'''


# 固定形式需要繼承base 否則sqlalchemy 是無法執(zhí)行查詢等操作的

class UserTable(base):

? ? # 固定形式,必須在這里定義表名,否則無法查詢到表

? ? __tablename__ = "user"

? ? # 定義int結(jié)構(gòu)的主鍵,自增

? ? id = Column(Integer,primary_key=True,autoincrement="auto")

? ? create_time = Column(DATETIME)

? ? update_time = Column(DATETIME)

? ? username = Column(String(64))

? ? password = Column(String(64))

? ? mobile = Column(String(20))

? ? email = Column(String(64))

? ? status = Column(String(16))


'''

請將表建在上方

'''


SessionType = scoped_session(sessionmaker(bind=engine, expire_on_commit=False))


def GetSession():

? ? return SessionType()


from contextlib import contextmanager


@contextmanager

def session_scope():

? ? session = GetSession()

? ? try:

? ? ? ? yield session

? ? ? ? session.commit()

? ? except:

? ? ? ? session.rollback()

? ? ? ? raise

? ? finally:

? ? ? ? session.close()


# 檢查數(shù)據(jù)庫是否存在該表。

def check_table_exist(tablename):

? ? with session_scope() as sess:

? ? ? ? r = sess.execute(

? ? ? ? ? ? "select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME='" + tablename + "' AND TABLE_SCHEMA='"+dbConfig["dbname"]+"';")

? ? ? ? if len(r.fetchall()) >= 1:

? ? ? ? ? ? return True

? ? ? ? else:

? ? ? ? ? ? return False


if __name__ == "__main__":

? ? print(quote_plus('Abcd@123456'))

? ? # 這個方法能夠創(chuàng)建所有繼承了base的表。

? ? base.metadata.create_all(engine)



SQLAlchemy 的配置鏈接文件的評論 (共 條)

分享到微博請遵守國家法律
资源县| 顺平县| 广德县| 高雄市| 英吉沙县| 甘肃省| 云霄县| 东乡族自治县| 铜陵市| 金湖县| 大港区| 汉中市| 施甸县| 电白县| 芜湖市| 宁蒗| 凤凰县| 信阳市| 永和县| 得荣县| 连江县| 玉门市| 齐河县| 滦南县| 富顺县| 河津市| 潮安县| 沐川县| 河北区| 永年县| 藁城市| 仙居县| 乃东县| 句容市| 津市市| 江华| 汤原县| 公安县| 南华县| 包头市| 台州市|