前言

最近项目等待前端接接口,比较空闲.就想学习一些新东西.学啥呢?考虑到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(), nullable=False, index=True) # 用户名,Varchar12位,不可为空,常规索引
pwd = Column(String(), nullable=False) # 密码,不可为空
token = Column(String()) # token

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

Base.metadata.create_all(engine)

运行py文件即可

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

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

alembic的教程

SQLAlchemy 使用(一)创建单一model的更多相关文章

  1. 当进行数据查询时候 要考虑创建一个model ;具备传入与输出的字段

    当进行数据查询时候 要考虑创建一个model ;具备传入与输出的字段

  2. 在ASP.NET MVC中使用Knockout实践02,组合View Model成员、Select绑定、通过构造器创建View Model,扩展View Model方法

    本篇体验使用ko.computed(fn)计算.组合View Model成员.Select元素的绑定.使用构造器创建View Model.通过View Model的原型(Prototype)为View ...

  3. maven创建分model的工程

    创建parentmvn archetype:generate -DgroupId=com.hikvision -DartifactId=aocp-parent -DarchetypeArtifactI ...

  4. SQLAlchemy通过models创建数据库表

    原地址:http://blog.csdn.net/jmilk/article/details/53184903 定义数据模型 models SQLAlchemy 允许我们根据数据库的表结构来创建数据模 ...

  5. sqlalchemy.exc.InvalidRequestError: Entity '<class 'model.TestCase'>' has no property 'project'

    原因: 修改表结构,但没有更新数据模型造成的 解决办法: 在sqlalchemy提供的表模型中增加project字段的描述信息 这次修改测试框架我有点想不起来,在测试代码中,是怎么通过sqlalche ...

  6. SQLAlchemy的应用创建

    1.首先创建app文件夹 同django 创建app 一样 创建文件 在创建的views中写入两个蓝图函数为了操作数据库的增删改查 acc.py from flask import Blueprint ...

  7. laravel创建新model数据的两种方法

    laravel中的CRUD操作中,通过对代表数据表中row的model对象操作,来更新数据库表. 对于创建新的row的操作,有两种功能上相同的方法: 1.create: $user = User::c ...

  8. falsk sqlalchemy 自关联创建评论回复数据库

    本项目在于创建类似微信上的评论回复功能的数据库 基类: from app import db from datetime import datetime class Basemadel(object) ...

  9. Django学习笔记(二)App创建之Model

    通过实例学习, 构建一个投票(Polls)Application, 目标结果包含两个site, 一个site用来显示投票问题以及投票结果(即将展示出来的网站), 另一个site用来管理Poll实例的增 ...

随机推荐

  1. Ansible第二章:palybook介绍与使用--小白博客

    playbook tasks variables templates handlers roles yaml介绍 yaml是一个可读性高的用来表达资料序列的格式,yaml参考了其他多种语言,包括:xm ...

  2. vuex学习总结

    vuex 学习 mapState,mapGetters 一般也写在 computed 中 , mapActions 一般写在 methods中.

  3. 使用axios post 提交数据,后台获取不到

    https://www.cnblogs.com/yiyi17/p/9409249.html(copy https://www.cnblogs.com/loveyaxin/p/8385694.html( ...

  4. python之路3-元组、列表、字典、集合

    1.元组 特点:一旦创建,内容不可修改,又叫只读列表 a= ('wang','zhang','zhao') print(a.count('zhao')) print(a.index('wang')) ...

  5. Jenkins与sonar扫描的集成问题

    记录本周遇到的头疼了很久的一个问题,由于公司需要使用jenkins来自动管理构建项目,然后在关联sonar对项目代码质量进行审核. 接着坑爹的问题来了,原有的技术手段为项目构建成功后通过jenkins ...

  6. 02Lua入门

    前言: 语言学起来其实相似点很多,简单整理的知识点 目录: 1.使用控制台 2.Lua基础 3.变量 4.运算符 5.控制结构 1.使用控制台 Lua脚本是包含一系列Lua命令的简单脚本(扩展名为.l ...

  7. wireshark分析dhcp过程

    ---恢复内容开始--- DHCP DHCP(Dynamic Host Configuration Protocol)是一个用于主机动态获取IP地址的配置解 析,使用UDP报文传送,端口号为67何68 ...

  8. Vue(一)安装

    环境准备 这里我们就直接使用官方推荐的Vue CLI方式 CLI (@vue/cli) 是一个全局安装的 npm 包,提供了终端里的 vue 命令.它可以通过 vue create 快速创建一个新项目 ...

  9. tqdm的使用方法

    Tqdm 是一个快速,可扩展的Python进度条,可以在 Python 长循环中添加一个进度提示信息,用户只需要封装任意的迭代器 tqdm(iterator),使用pip就可以安装 使用方法主要是:t ...

  10. <六>企业级开源仓库nexus3实战应用–使用nexus3配置yum私有仓库

    一两个星期之前,你如果在我跟前说起私服的事情,我大概会绕着你走,因为我对这个东西真的一窍不通.事实上也正如此,开发同学曾不止一次的跟我说公司的私服版本太旧了,许多新的依赖编译之后不会从远程仓库自动缓存 ...