python3 flask中SQLAlchemy创建表的简单介绍

在flask的SQLAlchemy中创建表,也是存在 ForeignKey(一对多) 与 ManyToMany(多对多) 的存在,以下是在models中单表、一对多、多对多的创建方式。

models.py代码如下:

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  from sqlalchemy.orm import relationship    Base = declarative_base()    # 【单表创建的示例】  class Users(Base):      __tablename__ = 'users'      id = Column(Integer,primary_key=True)      name = Column(String(32),index=True)      age = Column(Integer,default=18)      email = Column(String(32),unique=True)  # unique = True 表示该字段中的值唯一      ctime = Column(DateTime,default=datetime.datetime.now())      extra = Column(Text,nullable=True)        __table_args__ = (          UniqueConstraint('id','name',name='unique_id_name'),  # 创建表中id和name字段的唯一索引,最后一个参数是索引名,注意前面要写name=          Index('ix_name_email','name','email')   # 创建表中多个字段的普通索引      )      # 【一对多示例】  # 表1  class Hobby(Base):      __tablename__ = 'hobby'      id = Column(Integer,primary_key=True)      caption = Column(String(10),nullable=False,default='台球')    # 表2  class Person(Base):      __tablename__ = 'person'      nid = Column(Integer,primary_key=True)      name = Column(String(32),index=True,nullable=True)      # 创建一对多的关系      hobby_id = Column(Integer,ForeignKey('hobby.id'))        #   此字段不在表中生成,只是为了方便调用Hooby表;      # 正向查找时可以直接用“hobby.”调用“Hobby”表中的字段。      # 在hobby表中反向查找时可以用“pers”调用“Person”表中的字段。      hobby = relationship('Hobby',backref='pers')      # 【多对多示例】  # 两表的关系表  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'))        # 表1  class Server(Base):      __tablename__ = 'server'      id = Column(Integer,primary_key=True,autoincrement=True)      hostname = Column(String(15),nullable=True,unique=True)        # 用于方便查找的标识      groups = relationship('Group',secondary='server2group',backref='servers')    # 表2  class Group(Base):      __tablename__ = 'group'      id = Column(Integer,primary_key=True,autoincrement=True)      name = Column(String(32),nullable=True,unique=True)      def create_all():      """          根据类创建数据库表          :return:          """      engine = create_engine(          "mysql+pymysql://root:[email protected]:3306/test0621?charset=utf8",          max_overflow=0,  # 超过连接池大小外最多创建的连接          pool_size=5,  # 连接池大小          pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错          pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)      )        Base.metadata.create_all(engine)      def drop_db():      """      根据类删除数据库表      :return:      """      engine = create_engine(          "mysql+pymysql://root:[email protected]:3306/test0621?charset=utf8",          max_overflow=0,  # 超过连接池大小外最多创建的连接          pool_size=5,  # 连接池大小          pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错          pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)      )        Base.metadata.drop_all(engine)      if __name__ == '__main__':      drop_db()      create_all()  

原文出处:jasonlv -> http://www.jasonlv.cc/post-227.html

本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。