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

posted @ 2017-09-14 14:15  脚本小娃子  阅读(921)  评论(0编辑  收藏  举报