zoukankan      html  css  js  c++  java
  • SQLAlchemy 使用(一)创建单一model

    前言

     最近项目等待前端接接口,比较空闲.就想学习一些新东西.学啥呢?考虑到ORM的易用性,还是学习一下ORM.那么与Flask搭配的ORM有 flask-sqlalchemy 但是该组件专为Flask定制.

    如 JWT与Flask-JWT,考虑到适用性,还是觉得学 SQLAlchemy好一些.

    正文

    安装

    要想使用 SQLAlchemy,首当其冲的当然是安装啦

    pip install sqlalchemy

    建立model文件

    然后我们在某个目录下新建一个 models.py 文件 (文件名叫models完全是因为我想到ORM脑子里第一个就是Django哈)

    引入

    我们引入相关模块

    from sqlalchemy import create_engine
    from sqlalchemy.orm import sessionmaker
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, String, Integer

    值得注意的是,最后一个引入引入的是各个字段(比如varchar等,建立model用,所以可能不止这几个,可以按情况来)

    字段对照及约束

    字段对照表如下

    类型名说明
    Integer 整形
    SmallInteger 小整形
    BigInteger 长整形
    Float 浮点形
    String varchar
    Text 长文本 text
    Boolean tinyint
    Date 日期 datetime.date
    Time 时间 datetime.time
    DateTime 日期和时间 datetime.datetime

    约束如下

    选项说明
    primary_key 主键
    unique 唯一索引
    index 常规索引
    nullable 是否为空 默认为True
    default 默认值
    ForeignKey 外键

    连接数据库

    我们在操作数据库前需要先连接数据库

    这里以 pymysql 为例

    # 用户名:密码@访问地址:端口/数据库?编码方式
    engine = create_engine('mysql+mysqldb://root:***@***:***/website?charset=utf8mb4')
    
    # 创建DBSession类型
    DBSession = sessionmaker(bind=engine)
    
    # 创建Base基类
    Base = declarative_base()

    这时候你可以运行该文件测试是否成功

    如果报  ModuleNotFoundError: No module named 'MySQLdb'  错误是你缺少模块,安装即可(每个操作系统对应的模块不一样)

    以下的如果pip安装失败,使用

    yum install mysql-devel gcc gcc-devel python-devel
    pip install mysqlclient
    easy_install mysql-python (mix os)
    pip install mysql-python (mix os)
    apt-get install python-mysqldb (Linux Ubuntu)
    cd/usr/ports/databases/py-MySQLdb && make install clean (FreeBSD)
    yum install MySQL-python (linux Fedora, CentOS)
    pip install mysqlclient (Windows)

    创建 model

    下面我们写model

    定义的字段和约束参考上面的表

    class AdminUser(Base):
        # 用户表
        __tablename__ = 'admin_user'   # 表名
        id = Column(Integer, primary_key=True)  # 主键
        username = Column(String(12), nullable=False, index=True)  # 用户名,Varchar12位,不可为空,常规索引
        pwd = Column(String(256), nullable=False)  # 密码,不可为空
        token = Column(String(256))  # token

    想要将表应用到数据库,在最下面加上

    Base.metadata.create_all(engine)

    运行py文件即可

    但是这种方式只能新建表,不能修改/删除表字段

    这个时候我们需要该模块作者的另一力作  alembic

    alembic的教程

  • 相关阅读:
    实战开发-》融云tp3.2.3
    and,or
    查看版本
    MySQL优化-》执行计划和常见索引
    mysql优化-》查询缓存
    【初赛专题】——明天初赛
    echarts入门-2直角系组件网格,坐标轴,grid axis
    maven ideal jetty
    HashMap深度解析
    sql异常:nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
  • 原文地址:https://www.cnblogs.com/chnmig/p/10446341.html
Copyright © 2011-2022 走看看