sqlalchemy
1、ORM框架类型:DB first 和 Code first
DB frist : 先手动创建数据库----->> 使用ORM框架------>> 自动生成类
code frist : 不能创建数据库,只能先手动创建数据库和类----->> 使用ORM框架------>> 生成表
2、SQLALchemy属于code frist,因此我们先手动创建数据库和类,然后ORM框架会自动帮我创建数据表,当数据表已经存在的情况下,不会重复创建
3、ORM框架(对象、关系、映射):SQLALchemy
概念:SQLALchemy框架封装了底层复杂的SQL语句,提供简单的调用接口,让Python程序调用,再把Python程序写的类,转换成SQL语句发给MySQL执行;
对应关系如下:
类(class)---对应数据库里的表(table)
类的属性---对应数据库里的列(Column)
对象(类的实例)----对应数据库里的行
4、SQLALchemy只做类和SQL语句的转换,连接数据库是pymysql;
可以在(engine=create_engine("mysql+pymysql)指定
from sqlalchemy import create_engine engine = create_engine("mysql+pymysql://root:root@localhost:3306/webpy?charset=utf8",encoding="utf-8", echo=True) create_engine 方法进行数据库连接,返回一个 db 对象。里面的参数表示: 数据库类型+数据库驱动名称://用户名:密码(没有密码则为空,不填)@数据库主机地址/数据库名?编码 echo = True 是为了方便 控制台 logging 输出一些sql信息,默认是False
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index,CHAR,VARCHAR from sqlalchemy.orm import sessionmaker, relationship from sqlalchemy import create_engine Base = declarative_base() class UserType(Base): __tablename__ = 'usertype' id = Column(Integer, primary_key=True, autoincrement=True) title = Column(VARCHAR(32), nullable=True, index=True) class Users(Base): __tablename__="User" #设置表的名字 id=Column(Integer,nullable=True,autoincrement=True,primary_key=True) name=Column(String(32)) email=Column(String(49)) user_type_id = Column(Integer,ForeignKey("usertype.id")) # 设置外键 # __table_args__ ,SQLAlcheme的规则种设置索引 __table_args__ = ( UniqueConstraint('id', 'name', name='uix_id_name'), Index('ix_n_ex','name', 'email',), ) #连接指定数据库 engine=create_engine("mysql+pymysql://eric:123123@192.168.182.128:3306/db666?charset=utf8", max_overflow=5) # #找到程序中所有 类(表格),开始创建表,忽略数据库中已经存在的表; # Base.metadata.create_all(engine) # # #删除表 # Base.metadata.drop_all(engine)
5、架构图
参考:
1、http://www.cnblogs.com/sss4/p/7003203.html
2、https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0014021031294178f993c85204e4d1b81ab032070641ce5000
3、http://blog.csdn.net/fgf00/article/details/52949973
4、http://blog.csdn.net/zhyh1435589631/article/details/51549944