Flask-SQLAlchemy学习总结
来源:互联网 发布:fx3u一48编程手册书 编辑:程序博客网 时间:2024/06/05 18:44
1. 配置清单
配置键说明SQLALCHEMY_DATABASE_URI
用于连接数据的数据库。例如:
sqlite:////tmp/test.db
mysql://username:password@server/db
get_debug_queries()
。SQLALCHEMY_NATIVE_UNICODE可以用于显式地禁用支持原生的 unicode。这是 某些数据库适配器必须的(像在 Ubuntu 某些版本上的 PostgreSQL),当使用不合适的指定无编码的数据库 默认值时。SQLALCHEMY_POOL_SIZE数据库连接池的大小。默认是数据库引擎的默认值 (通常是 5)。SQLALCHEMY_POOL_TIMEOUT指定数据库连接池的超时时间。默认是 10。SQLALCHEMY_POOL_RECYCLE自动回收连接的秒数。这对 MySQL 是必须的,默认 情况下 MySQL 会自动移除闲置 8 小时或者以上的连接。 需要注意地是如果使用 MySQL 的话, Flask-SQLAlchemy 会自动地设置这个值为 2 小时。SQLALCHEMY_MAX_OVERFLOW控制在连接池达到最大值后可以创建的连接数。当这些额外的 连接回收到连接池后将会被断开和抛弃。SQLALCHEMY_TRACK_MODIFICATIONS如果设置成 True (默认情况),Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。这需要额外的内存, 如果不必要的可以禁用它。Flask项目中,一般使用单独的文件存储配置(如:config.py),应用程序可以使用from_object()来获取配置信息2. 声明模型
db = SQLAlchemy()class User(db.Model): __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True) email = db.Column(db.String(120), unique=True) def __init__(self, username, email): self.username = username self.email = email def __repr__(self): return '<User %r>' % self.username列类型说明Integer一个整数String (size)有长度限制的字符串Text一些较长的 unicode 文本DateTime表示为 Python
datetime
对象的 时间和日期Float存储浮点值Boolean存储布尔值PickleType存储为一个持久化的 Python 对象LargeBinary存储一个任意大的二进制数据选项名说明primary_key如果设为True,表示主键unique如果设为True,这列不重复index如果设为True,创建索引,提升查询效率nullable如果设为True,允许空值default为这列定义默认值,可以接受lambda表达式3. CRUD
a. 插入记录
向数据库插入数据分为三个步骤:
- 创建 Python 对象
- 把它添加到会话
- 提交会话
>>> from yourapp import User>>> me = User('admin', 'admin@example.com')>>> db.session.add(me)>>> db.session.commit()b. 删除记录
>>> db.session.delete(me)>>> db.session.commit()c. 查询记录
Flask-SQLAlchemy 在您的 Model 类上提供了 query 属性。当您访问它时,您会得到一个新的所有记录的查询对象。
>>> peter = User.query.filter_by(username='peter').first()>>> peter.id1>>> peter.emailu'peter@example.org'SQLAlchemy有查询过滤器如下:
过滤器说明filter()把过滤器添加到原查询,返回新查询filter_by()把等值过滤器添加到原查询,返回新查询limit()使用指定值限制原查询返回的结果数量,返回新查询offset()偏移原查询返回的结果,返回新查询order_by()排序返回结果,返回新查询groupby()原查询分组,返回新查询这些过滤器返回的结果都是一个新查询,这些查询其实是生成的SQL语句,惰性求值方式也体现在查询上,而这些语句不能生成需要查询的对象,需要调用其他的方法生成对象。
SQL查询执行函数:
方法说明all()以列表形式返回结果first()返回第一个结果,如果没有返回Nonefirst_or_404()返回第一个结果,如果没有抛出404异常get()返回主键对应记录,没有则返回Noneget_or_404()返回主键对应记录,如果没有抛出404异常count()返回查询结果数量paginate()返回paginate对象,此对象用于分页
4.绑定多个数据库
下面的配置声明了三个数据库连接。特殊的默认值和另外两个分别名为 users`(用于用户)和 `appmeta 连接到一个提供只读访问应用内部数据的 sqlite 数据库):
SQLALCHEMY_DATABASE_URI = 'postgres://localhost/main'SQLALCHEMY_BINDS = { 'users': 'mysqldb://localhost/users', 'appmeta': 'sqlite:////path/to/appmeta.db'}create_all() 和 drop_all() 方法默认作用于所有声明的绑定(bind),包括默认的。这个行为可以通过提供 bind 参数来定制。
>>> db.create_all()>>> db.create_all(bind=['users'])>>> db.create_all(bind='appmeta')>>> db.drop_all(bind=None)当您声明模型时,您可以用 __bind_key__ 属性指定绑定(bind):
class User(db.Model): __bind_key__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True)
如果您在模型上指定了 __bind_key__ ,您可以用它们准确地做您想要的。模型会自行连 接到指定的数据库连接。
5. 数据迁移
创建管理文件manage.py
from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyfrom flask_script import Manager, Shellfrom flask_migrate import Migrate, MigrateCommanddb = SQLAlchemy()app = Flask(__name__)app.config.from_object(config[config_name])db.init_app(app)migrate = Migrate(app, db)manager = Manager(app)manager.add_command('db', MigrateCommand)manager.run()manager使用说明:
命令格式:python manager.py db [command]
command说明:init-初始化数据库迁移(自动生成migrations目录及文件),仅在第一次使用migrate-生成迁移数据,自动根据model变化生成迁移数据文件,含版本控制upgrade-执行升级操作,将变动的表结构提交到数据库,保留数据库原数据downgrade-执行降级操作, 相当于撤回本次升级操作
阅读全文
0 0
- Flask-SQLAlchemy 学习总结
- Flask-SQLAlchemy学习总结
- Flask-SQLAlchemy 学习
- Flask-SQLALchemy学习笔记
- Flask +jinja2+bootstrap+sqlite3+sqlalchemy构建web基础学习总结
- Flask学习记录之Flask-SQLAlchemy
- Flask学习记录之Flask-SQLAlchemy
- Python学习之Flask-SQLAlchemy乱码异常
- sqlalchemy学习总结
- 【Flask】Flask和SQLAlchemy:init_app
- Flask学习(三):SQLAlchemy无法创建数据库
- Flask-SQLAlchemy管理数据库
- Flask sqlalchemy操作数据库
- flask-sqlalchemy(1)
- flask-sqlalchemy实例
- Flask-SQLAlchemy 快速入门
- flask-sqlalchemy 简单笔记
- flask-sqlalchemy 实例代码
- matlab图像类型转换以及uint8、double、im2double、im2uint8和mat2gray等说明
- 多线程的中断
- TensorFlow之三 ----- 机器学习初学者的MNIST
- 购物车布局
- C++随笔1
- Flask-SQLAlchemy学习总结
- Linux中的mariadb----数据库
- HTML:使用表格
- 解决微信未审核应用(无法支持微信分享)问题
- MT6735[CTS Verifier][Test Method] Policy Serialization Test
- Java检查异常和非检查异常区别
- Kettle (2)
- Linux下redis安装与使用
- mac iterm2 安装 lrzsz rz sz命令