SQLAlchemy部分
相关链接:
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.查询id为4的用户[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部分相关推荐
- SQLALchemy之Python连接MySQL
20220225 https://www.cnblogs.com/toheart/p/9802990.html pymssql连接sqlserver https://blog.csdn.net/qq_ ...
- Python的数据库操作(Sqlalchemy)
ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射.简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系.这样,我们要操作数据库,数据库中的表 ...
- 04:sqlalchemy操作数据库 不错
目录: 1.1 ORM介绍(作用:不用原生SQL语句对数据库操作) 1.2 安装sqlalchemy并创建表 1.3 使用sqlalchemy对表基本操作 1.4 一对多外键关联 1.5 sqlalc ...
- Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- python 之路,Day11 (下)- sqlalchemy ORM
python 之路,Day11 - sqlalchemy ORM 本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 1. ORM介绍 ...
- 自动获取mysql建表语句_脚本工具---自动解析mysql建表语句,生成sqlalchemy表对象声明...
常规建表语句: CREATE TABLE `test_table` ( `id` int(11) NOT NULL, `name` char(64) NOT NULL, `password` char ...
- ORM 框架中SQLALCHEMY一点点个人总结
声明:工作原因涉及一点 What is ORM 答: object relation mapping 一种实现对象与数据库中的关系表映射的中间件.ORM 框架中最有名的是SQLALCHEMY 具体使用 ...
- Python之Mysql及SQLAlchemy操作总结
一.Mysql命令总结 1.创建库 create database test1; 2.授权一个用户 grant all privileges on *.* to 'feng'@'%' identifi ...
- sqlalchemy数据库中的offset偏移查询的使用
文章目录 1.实验结果: 2.主文件main.py: 1.实验结果: 2.主文件main.py: from flask_wtf import FlaskForm from flask_sqlalche ...
- sqlalchemy数据库中的limit使用(限制查询的用户数量)
文章目录 1.实验结果: 2.主文件:main.py: 1.实验结果: 2.主文件:main.py: from flask_wtf import FlaskForm from flask_sqlalc ...
最新文章
- 用Python拨打电话
- 150kHz无线导航信号接收板调试-Ver2
- [GXOI/GZOI2019]与或和
- ASP 高亮显示不区分大小写的关键字
- 2014恒生电子实习生笔试数据库部分
- 买到假芯片,血的教训!
- 分库分表产生的问题,及注意事项
- Java 8 Optional 类 学习
- power bulider 9.0 如何将sql语句查询的值返回给变量_SQL—你应该知道的子查询
- SSH与EJB 比较
- Java网络编程之客户端中的Socket
- 7.TCP/IP 详解卷1 --- Ping 程序
- 欧姆龙cp1h指令讲解_欧姆龙cp1h常用指令学习(十五)网络通讯指令SEND,RECV,CMND...
- OpenGL 编程指南 ( 原书第 9 版 ) --- 第一章
- Visio 2003 Professional
- 软件工程师具体的工作内容是什么?
- Heartbeat配置方案
- DCM:中间件家族迎来新成员,属实牛逼
- ps中矫正镜头的一种方法
- 手机恢复出厂设置后一直显示无服务器,手机恢复出厂设置后开不了机怎么办【图文教程】...