''' 通过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基类的表格