zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Browsersync 浏览器自动刷新
    react学习历程问题记载(二)
    react学习历程问题记载(一)
    LessJs笔记
    toFixed的使用
    react+ts封装AntdUI的日期选择框之月份选择器DatePicker.month
    elementUI实现日期框选中项文本高亮
    react+lib-flexible适配浏览器宽度配置
    vue+lib-flexible实现大小屏幕,超大屏幕的适配展示。
    div+伪元素实现太极图
  • 原文地址:https://www.cnblogs.com/shengulong/p/7520398.html
Copyright © 2011-2022 走看看