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