首页 > 技术文章 > 08使用sqlalchemy创建表主要方法

clcloveHuahua 2018-01-11 12:43 原文

'''
通过sqlalchemy创建表需要三要素:引擎,基类,元素
'''
from sqlalchemy import create_engine  # 创建表的引擎
from sqlalchemy.ext.declarative import declarative_base  # 导入基类
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index  # 导入元素

# 1.创建表
'''
    create table hero(
      id integer not null auto_increment,
      name varchar(32),
      pwd varchar(64),
      primary key (id)
    )engine=InnoDB default charset='utf-8';
'''

# 1.使用引擎链接数据库
'''
    传入参数:数据库类型+连接库+用户名+密码+主机,字符编码,是否打印建表细节
    1.使用mysql数据库,使用pymysql进行数据库链接.
    2. mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
    3.echo=True表示:在控制台打印执行语句
'''
engine = create_engine("mysql+pymysql://cai:123@localhost/test?charset=utf8", echo=True)

# 2.生成ORM基类,要创建的映射类均要继承下面的基类.
Base = declarative_base()


# 创建单表
class User(Base):
    __tablename__ = 'users'  # 表名
    id = Column(Integer, primary_key=True)  # 主键id,设为主键的时候自动增长
    name = Column(String(32), nullable=False, index=True)  # 名称,不能为空,创建索引
    pwd = Column(String(64), nullable=False)

    __table_args__ = (
        UniqueConstraint('id', 'name', name='uix_id_name'),  # 联合唯一索引
        Index('ix_id_name', 'name')  # 联合索引
    )


# 创建1对多的表
class Colour(Base):
    __tablename__ = 'colour'
    id = Column(Integer, primary_key=True, autoincrement=True)
    colour=Column(String(32),server_default='red',unique=True)#默认值为red,唯一,同一列不能有相同值

class Dress(Base):
    __tablename__='dress'
    id=Column(Integer,primary_key=True)
    name=Column(String(32),index=True,nullable=True)
    colour_id=Column(Integer,ForeignKey(Colour.id))#创建一个外键关联colour表

#多表对夺标
class Group(Base):
    __tablename__='group'
    id=Column(Integer,primary_key=True)
    name=Column(String(64),unique=True,nullable=False)#唯一,不能为空

class Server(Base):
    __tablename__='server'
    id=Column(Integer,primary_key=True,autoincrement=True)
    hostname=Column(String(64),unique=True,nullable=False)

class ServerToGroup(Base):
    __tablename__='servertogroup'
    id=Column(Integer,primary_key=True,autoincrement=True)
    server_id=Column(Integer,ForeignKey(Server.id))
    group_id=Column(Integer,ForeignKey('group.id'))


Base.metadata.create_all(engine)  # 创建所有继承Base基类的表格

  

推荐阅读