相关链接:

https://blog.csdn.net/zd0303/article/details/50470162

https://blog.csdn.net/abcd1f2/article/details/51395561

https://www.jb51.net/article/49789.htm

Flask-SQLAlchemy安装及设置

  • SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升
  • SQLAlchemy是一个关系型数据库框架,它提供了高层的 ORM 和底层的原生数据库的操作。flask-sqlalchemy 是一个简化了 SQLAlchemy 操作的flask扩展。
  • 文档地址:http://docs.jinkan.org/docs/flask-sqlalchemy

安装

  • 安装 flask-sqlalchemy
pip install flask-sqlalchemy
  • 如果连接的是 mysql 数据库,需要安装 mysqldb 驱动
pip install flask-mysqldb

数据库连接设置

  • 在 Flask-SQLAlchemy 中,数据库使用URL指定,而且程序使用的数据库必须保存到Flask配置对象的 SQLALCHEMY_DATABASE_URI 键中
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://账户名:密码@127.0.0.1:3306/test'
  • 其他设置:
# 动态追踪修改设置,如未设置只会提示警告
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
#查询时会显示原始SQL语句
app.config['SQLALCHEMY_ECHO'] = True 
  • 配置完成需要去 MySQL 中创建项目所使用的数据库
$ mysql -uroot -pmysql
$ create database test charset utf8;
  • 其他配置

连接其他数据库

完整连接 URI 列表请跳转到 SQLAlchemy 下面的文档 (Supported Databases) 。这里给出一些 常见的连接字符串。

  • Postgres:
postgresql://scott:tiger@localhost/mydatabase
  • MySQL:
mysql://scott:tiger@localhost/mydatabase
  • Oracle:
- oracle://scott:tiger@127.0.0.1:1521/sidname
  • SQLite (注意开头的四个斜线):
sqlite:absolute/path/to/foo.db

常用的SQLAlchemy字段类型

常用的SQLAlchemy列选项

常用的SQLAlchemy关系选项

数据库基本操作

  • 在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。

    • 会话用 db.session 表示。在准备把数据写入数据库前,要先将数据添加到会话中然后调用 commit() 方法提交会话。
  • 在 Flask-SQLAlchemy 中,查询操作是通过 query 对象操作数据。

    • 最基本的查询是返回表中所有数据,可以通过过滤器进行更精确的数据库查询
 1 """
 2 SQLAlchemy是flask的扩展,不是原生自带的
 3 必须配置信息:
 4 1.app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test'
 5 2.# 动态追踪修改设置,如未设置只会提示警告
 6 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
 7
 8 其他的配置可以自己配,也可以不配值
 9 SQLite是手机等移动终端的数据库
10 耦合度很低
11 """
12 """
13 1.设置配置文件:
14 2.创建数据库对象db = SQLAlchemy(app):
15 3.创建模型类class Book(db.Model):
16 4.创建表db.create_all():
17 """
18 from flask import Flask
19 from flask_sqlalchemy import SQLAlchemy  # 导入数据库
20
21 app = Flask(__name__)
22
23
24 # 1.>设置配置文件
25 class Config:
26     # 记住:直接从源码里面拷贝,千万不要手写,很难记
27     # 设置数据库里面的主机ip,port名字,密码,数据库名
28     # test20:你创建的数据库名字
29     # password:你自己设置的登录密码
30     # root:你的用户名  这一项必须设置
31     SQLALCHEMY_DATABASE_URI = 'mysql://root:password@localhost:3306/test20'
32     # 动态追踪修改设置,如未设置只会提示警告,不会报错.这一项必须设置
33     app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
34     # 打印原始的SQL语句,这一项可以不设置
35     # app.config['SQLALCHEMY_ECHO'] = True
36
37
38 # flask的app对象和数据库进行绑定
39 app.config.from_object(Config)
40
41 #  create database test20 charset utf8; 创建数据库,记得设置编码方式
42 #  show create table books; 查看创建过程
43
44 # 创建数据库对象
45 # SQLAlchemy(app)语法,类创建一个数据库对象,db是名字,可以随意取
46 # 2.>创建数据库对象.注意:需要放到加载配置文件之后, 务必在app.config.from_object(Config)的后面
47 db = SQLAlchemy(app)
48
49
50 # 建立表,和当前的数据库进行关联
51 # 创建数据库的模型类,db.Model:语法,表示和当前的数据库进行关联
52 # 3.>创建模型类<只是设置表结构>
53 class Book(db.Model):
54     """设置表结构"""
55     # 创建表的名字,表的名字可以不设置,因为系统会给一个默认的表名,就是和类的名字一样,只不过是小写字符.但是建议自己设置
56     __tablename__ = 'books'
57     # db.Column:注意是C大写
58     # 创建列id字段,设置成主键
59     # 注意:在这里必须设置主键,否则无法进行Book类和books表名之间的关联映射.
60     id = db.Column(db.Integer, primary_key=True)
61     # 设置书的名字
62     name = db.Column(db.String(128))
63     # 作者
64     author_name = db.Column(db.String(128))
65
66
67 if __name__ == '__main__':
68     # 删除表
69     db.drop_all()
70     # 创建数据库中的表
71     # 4.>创建表
72     db.create_all()
73     # 初始化值.book是Book()类创建的对象.表示数据库books表中的一条记录.
74     book1 = Book()
75     book1.name = '帝国的沦陷'
76     book1.author_name = '周作人'
77     # 提交到数据库
78     # 初始化完成之后必须提交.否则不会生效
79     # db.session.add(对象)
80     db.session.add(book1)
81     db.session.commit()
82     app.run()

常用的SQLAlchemy查询过滤器

常用的SQLAlchemy查询执行器

  1 """
  2 1.设置配置文件:
  3 2.创建数据库对象db = SQLAlchemy(app):
  4 3.创建模型类class Book(db.Model):
  5 4.创建表db.create_all():
  6
  7 注意:sqlalchemy只是连接数据库,不能创建数据库
  8 回滚:rollback,不是callback
  9 """
 10 from flask import Flask
 11 from flask_sqlalchemy import SQLAlchemy  # 导入数据库
 12
 13 app = Flask(__name__)
 14
 15
 16 # 1.>设置配置文件
 17 class Config:
 18     SQLALCHEMY_DATABASE_URI = 'mysql://root:password@localhost:3306/test20'
 19     # 动态追踪修改设置,如未设置只会提示警告,不会报错.这个必须设置
 20     app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
 21
 22
 23 # flask的app对象必须和配置进行关联
 24 app.config.from_object(Config)
 25 # app交给数据库关联
 26 db = SQLAlchemy(app)
 27
 28 # ---------------创建两张表----------------
 29 """
 30 角色表和用户表:一对多的关系.一个角色对应着多个用户
 31 一个用户只有一个角色
 32
 33
 34 角色表:admin管理员  user普通用户
 35 用户表:张三(管理员),李四(普通),王五(普通)
 36
 37 一个角色可以对应多个用户:一对多
 38
 39 """
 40
 41
 42 class Role(db.Model):
 43     """角色表"""
 44     __tablename__ = 'roles'
 45     id = db.Column(db.Integer, primary_key=True)
 46     name = db.Column(db.String(128))
 47     # 设置关系
 48     # 让角色和用户表进行关联
 49     # 在设置关系的时候,1的一方设置关系,多的地方设置外键
 50     # 用在多表查询的时候使用.
 51     """
 52     role
 53     Out[15]: Role = admin
 54
 55     In [16]: role.us
 56     Out[16]:
 57     [User = wang,Email = wang@163.com,
 58      User = zhou,Email = zhou@163.com,
 59      User = qian,Email = qian@gmail.com,
 60      User = liu,Email = liu@itheima.com]
 61
 62     """
 63     # backref='role' 反向查询,需要给User设置一个属性,属性名字:role,属性名可以随意取
 64     us = db.relationship('User', backref='role')
 65
 66     def __repr__(self):
 67         """返回一个可读的字符串,打印数据<平时不需要设置>"""
 68         return '角色:%s' % self.name
 69
 70
 71 class User(db.Model):
 72     """用户表"""
 73     __tablename__ = 'users'
 74     id = db.Column(db.Integer, primary_key=True)
 75     name = db.Column(db.String(128))
 76     email = db.Column(db.String(128))
 77     password = db.Column(db.String(128))
 78     # 在多的一方设置外键
 79     role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
 80
 81     def __repr__(self):
 82         """返回一个可读的字符串,打印数据<平时不需要设置>"""
 83         # 'User = %s,%s' :注意这个格式,是User类中的email属性.对应到数据库中就是users表中的email字段
 84         return '姓名:%s,邮箱:%s' % (self.name, self.email)
 85
 86 # ipython下面执行下面的语句,然后使用ipython进行测试
 87 # from more_table import *
 88
 89 @app.route('/')
 90 def index():
 91     u = User.query.all()
 92     return 'index'
 93
 94
 95 # 查询有多少个管理员,分别叫什么
 96
 97 if __name__ == '__main__':
 98     # 删除表,如果存在就先删除,下面会再次创建
 99     db.drop_all()
100     # 创建数据库中的表
101     # 4.>创建表
102     db.create_all()
103     ro1 = Role(name='admin')
104     db.session.add(ro1)
105     db.session.commit()
106     # 再次插入一条数据
107     ro2 = Role(name='user')
108     db.session.add(ro2)
109     db.session.commit()
110     # 提交到数据库
111     # 初始化完成之后必须提交.否则不会生效
112     # db.session.add(对象)
113     us1 = User(name='王佳芝', email='wang@163.com', password='123456', role_id=ro1.id)
114     us2 = User(name='庄聚贤', email='zhang@189.com', password='201512', role_id=ro2.id)
115     us3 = User(name='陈洪静', email='chen@126.com', password='987654', role_id=ro2.id)
116     us4 = User(name='周作人', email='zhou@163.com', password='456789', role_id=ro1.id)
117     us5 = User(name='唐景生', email='tang@itheima.com', password='158104', role_id=ro2.id)
118     us6 = User(name='吴晗', email='wu@gmail.com', password='5623514', role_id=ro2.id)
119     us7 = User(name='钱之江', email='qian@gmail.com', password='1543567', role_id=ro1.id)
120     us8 = User(name='柳弄币', email='liu@itheima.com', password='867322', role_id=ro1.id)
121     us9 = User(name='李谦钱', email='li@163.com', password='4526342', role_id=ro2.id)
122     us10 = User(name='孙博文', email='sun@163.com', password='235523', role_id=ro2.id)
123     db.session.add_all([us1, us2, us3, us4, us5, us6, us7, us8, us9, us10])
124     db.session.commit()
125     app.run()
126
127 """
128 role 查询user role.us 很好查
129
130 user 查询 role
131
132 """

1.查询所有用户数据

2.查询有多少个用户

3.查询第1个用户

4.查询id4的用户[3种方式]

5. 查询名字结尾字符为xxx的所有数据[开始/包含]

6. 查询名字不等于王佳芝的所有数据[2种方式]

7. 查询名字以王开头并且和邮箱以wang开头的所有数据[2种方式]

8. 查询password `123456` 或者 `email`  `itheima.com` 结尾的所有数据
 
9. 查询id [1, 3, 5, 7, 9] 的用户列表

10. 查询name孙博文的角色数据

11. 查询所有用户数据,并以邮箱排序(降序排序)

12. 每页3个,查询第2页的数据

表中所有数据:

转载于:https://www.cnblogs.com/huaibin/p/9858014.html

SQLAlchemy部分相关推荐

  1. SQLALchemy之Python连接MySQL

    20220225 https://www.cnblogs.com/toheart/p/9802990.html pymssql连接sqlserver https://blog.csdn.net/qq_ ...

  2. Python的数据库操作(Sqlalchemy)

    ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射.简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系.这样,我们要操作数据库,数据库中的表 ...

  3. 04:sqlalchemy操作数据库 不错

    目录: 1.1 ORM介绍(作用:不用原生SQL语句对数据库操作) 1.2 安装sqlalchemy并创建表 1.3 使用sqlalchemy对表基本操作 1.4 一对多外键关联 1.5 sqlalc ...

  4. Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  5. python 之路,Day11 (下)- sqlalchemy ORM

    python 之路,Day11 - sqlalchemy ORM 本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 1. ORM介绍 ...

  6. 自动获取mysql建表语句_脚本工具---自动解析mysql建表语句,生成sqlalchemy表对象声明...

    常规建表语句: CREATE TABLE `test_table` ( `id` int(11) NOT NULL, `name` char(64) NOT NULL, `password` char ...

  7. ORM 框架中SQLALCHEMY一点点个人总结

    声明:工作原因涉及一点 What is ORM 答: object relation mapping 一种实现对象与数据库中的关系表映射的中间件.ORM 框架中最有名的是SQLALCHEMY 具体使用 ...

  8. Python之Mysql及SQLAlchemy操作总结

    一.Mysql命令总结 1.创建库 create database test1; 2.授权一个用户 grant all privileges on *.* to 'feng'@'%' identifi ...

  9. sqlalchemy数据库中的offset偏移查询的使用

    文章目录 1.实验结果: 2.主文件main.py: 1.实验结果: 2.主文件main.py: from flask_wtf import FlaskForm from flask_sqlalche ...

  10. sqlalchemy数据库中的limit使用(限制查询的用户数量)

    文章目录 1.实验结果: 2.主文件:main.py: 1.实验结果: 2.主文件:main.py: from flask_wtf import FlaskForm from flask_sqlalc ...

最新文章

  1. 用Python拨打电话
  2. 150kHz无线导航信号接收板调试-Ver2
  3. [GXOI/GZOI2019]与或和
  4. ASP 高亮显示不区分大小写的关键字
  5. 2014恒生电子实习生笔试数据库部分
  6. 买到假芯片,血的教训!
  7. 分库分表产生的问题,及注意事项
  8. Java 8 Optional 类 学习
  9. power bulider 9.0 如何将sql语句查询的值返回给变量_SQL—你应该知道的子查询
  10. SSH与EJB 比较
  11. Java网络编程之客户端中的Socket
  12. 7.TCP/IP 详解卷1 --- Ping 程序
  13. 欧姆龙cp1h指令讲解_欧姆龙cp1h常用指令学习(十五)网络通讯指令SEND,RECV,CMND...
  14. OpenGL 编程指南 ( 原书第 9 版 ) --- 第一章
  15. Visio 2003 Professional
  16. 软件工程师具体的工作内容是什么?
  17. Heartbeat配置方案
  18. DCM:中间件家族迎来新成员,属实牛逼
  19. ps中矫正镜头的一种方法
  20. 手机恢复出厂设置后一直显示无服务器,手机恢复出厂设置后开不了机怎么办【图文教程】...

热门文章

  1. Cannot execute binary file 之原因
  2. amc 美国数学竞赛能用计算机吗,关于AMC美国数学竞赛的QA
  3. 503错误的原因和解决方法
  4. 用rand(7)构造rand(10)
  5. 梯度提升(Gradient Boosting)算法
  6. MPC-BE 1.6.0.6370 Beta 经典多媒体播放器
  7. 网站被黑总被跳转到其他网站的处理解决过程
  8. web网站http转成https
  9. 计算机科学家王选 题,李星、王永民获2016年王选奖
  10. 物联网python开发实践