• SQLALchemy之创建表,删除表


    1、创建引擎

    "数据库+第三方模块://用户名:密码@数据库服务端IP:端口号/数据库名?编码"

    复制代码
    engine = create_engine(
        "mysql+pymysql://root:123@127.0.0.1:3306/t1?charset=utf8",
        max_overflow=0,  # 超过连接池大小外最多创建的连接
        pool_size=5,  # 连接池大小
        pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错
        pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
        echo = True    # echo参数为True时,会显示每条执行的SQL语句,可以关闭   
    )
    复制代码

    2、创建表

    (1)引入,创建Base

    复制代码
    import datetime
    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, UniqueConstraint, Index
    
    Base = declarative_base()
    复制代码

    (2)定义类(表)

    class  User(Base):

    》》》》在定义类中创建:::

    1)表名:

    # 这是在数据库中存在的表名
    __tablename__ = 'users'

    2)主键

    设置自增:autoincrement=True

    id = Column(Integer, primary_key=True,autoincrement=True)

    3)普通字段

    字符串长度限制,index索引,null

    # 32代表最大长度,添加index索引,不可以为null
    name = Column(String(32), index=True, nullable=False)

    4)普通字段2

    唯一索引

    # 添加唯一索引
    email = Column(String(32), unique=True)

    5)普通字段3

    设置默认值

    # 设置默认值
    age = Column(Integer, default=18)

    6)时间字段

    # 设置默认值时不能加括号
    ctime = Column(DateTime, default=datetime.datetime.now)

    7)联合唯一,联合索引

    复制代码
    __table_args__ = (
            # 联合唯一
            # UniqueConstraint('id', 'name', name='uix_id_name'),
            
            # 联合索引
            # Index('ix_id_name', 'name', 'email'),
        )
    复制代码

    8)一对多关系

    ForeignKey中的参数是表名.要关联的字段,注意这里的表名不是别的类名,而是__tablename__参数值

    默认是同步删除同步更新的,也就是on  delete cascade   on  update  cascade

    hobby_id = Column(Integer, ForeignKey("hobby.id"))

    9)多对多关系

    要自己创建关系表,分别和其它2张表做forejgnkey

    class Server2Group(Base):
        __tablename__ = 'server2group'
        id = Column(Integer, primary_key=True, autoincrement=True)
        server_id = Column(Integer, ForeignKey('server.id'))
        group_id = Column(Integer, ForeignKey('group.id'))

    (3)利用Base的create_all创建表

    Base.metadata.create_all(engine)

    3、删除表

    注意注意删除一定要慎重

    利用Base的drop_all删除表

    Base.metadata.drop_all(engine)
  • 相关阅读:
    无符合条件的记录,SUM函数返回NULL。返回0而不是Null
    Java中的堆栈,队列,链表
    Java集合类的问题
    2014.7.30日结
    我的CSS之路1
    2014.7.27-7.28日结
    LeetCode解题源代码链接集锦一
    2014.7.23日结
    C++之数组声明与初始化
    系统结构之指令
  • 原文地址:https://www.cnblogs.com/ExMan/p/9856492.html
Copyright © 2020-2023  润新知