zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    [C++]野指针的产生以及应对办法
    [boost]使用boost::function和boost::bind产生的down机一例
    [C++]给C++封装一个多播委托
    [vim]clang complete不能智能提示mutex/thread的解决办法(请获取最新版的clang complete)
    [C++11]shared_ptr效率比较
    [C++]怎么样实现一个较快的Hash Table
    [C++]运行时,如何确保一个对象是只读的
    [libcxx]用gdb打印libcxx容器内的内容
    [thrift]thrift中的对象序列化
    [tolua++]tolua++中暴露对象给lua时,一定要把析构函数暴露给lua
  • 原文地址:https://www.cnblogs.com/believepd/p/10372269.html
Copyright © 2011-2022 走看看