SQLAlchemy-Utils


由於sqlalchemy中沒有提供choice方法,所以借助SQLAlchemy-Utils組件提供的choice方法。

安裝:

pip3 install sqlalchemy_utils

示例:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column
from sqlalchemy import Integer, String
from sqlalchemy import create_engine
from sqlalchemy_utils import ChoiceType

Base = declarative_base()


class UserInfo(Base):
    __tablename__ = "userinfo"

    id = Column(Integer, primary_key=True)
    name = Column(String(16), index=True, unique=True, nullable=False, autoincrement=True)
    gender_choices = (
        (0, ""),
        (1, ""),
        (2, "保密")
    )
    gender = Column(ChoiceType(gender_choices, Integer()))

    __table_args__ = {
        "mysql_engine": "Innodb",
        "mysql_charset": "utf8",
    }


def init_db():
    """根據類創建數據庫表"""
    engine = create_engine(
        "mysql+pymysql://root:""@127.0.0.1:3306/sqlalchemy_db?charset=utf8",
        max_overflow=0,  # 超過連接池大小外最多創建的連接
        pool_size=5,     # 連接池大小
        pool_timeout=20, # 池中沒有連接最多等待的時間,否則報錯
        pool_recycle=-1  # 多久之后對線程池中的線程進行一次連接的回收(重置)
    )
    Base.metadata.create_all(engine)


def drop_db():
    """根據類刪除數據庫表"""
    engine = create_engine(
        "mysql+pymysql://root:""@127.0.0.1:3306/sqlalchemy_db?charset=utf8",
        max_overflow=0,
        pool_size=5,
        pool_timeout=20,
        pool_recycle=-1
    )
    Base.metadata.drop_all(engine)


if __name__ == "__main__":
    drop_db()
    init_db()
models.py
from models import UserInfo
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine(
    "mysql+pymysql://root:""@127.0.0.1:3306/sqlalchemy_db?charset=utf8",
    max_overflow=0,  # 超過連接池大小外最多創建的連接
    pool_size=5,     # 連接池大小
    pool_timeout=20, # 池中沒有連接最多等待的時間,否則報錯
    pool_recycle=-1  # 多久之后對線程池中的線程進行一次連接的回收(重置)
)
SessionFactory = sessionmaker(bind=engine)
session = SessionFactory()

ret = session.query(UserInfo).all()
for row in ret:
    print(row.id, row.name, row.gender.value)
# 1 pd 男
# 2 pq 保密
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM