Flask实例教程六

时间:2021-11-06 13:16:41

    Flask-SQLALchemy 是一个给你的应用添加 SQLALchemy 支持的 Flask 扩展。SQLALchemy 是Python语言的SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行,提供能兼容众多数据库(如 SQLite、MySQL、Postgres、Oracle、MS-SQL、SQLServer 和 Firebird)的企业级持久性模型。


一、为你的Flask应用加载Flask-SqlAlchemy扩展

from flask import Flaskfrom flask.ext.sqlalchemy import SQLAlchemy
 
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)  #这个就是你以后操作数据库的对象实例了

SQLALCHEMY_DATABASE_URI格式实例:

postgresql://scott:tiger@localhost/mydatabasemysql://scott:tiger@localhost/mydatabaseoracle://scott:tiger@127.0.0.1:1521/sidnamesqlite:////absolute/path/to/foo.db        #注意:有3个斜杠+路径

二、建立数据库模型和初始化数据库

建立数据库模型:

import hashlibfrom app import db  #在数据库模型文件中导入上面建立的db对象 class User(db.Model):    id = db.Column(db.Integer, primary_key=True)  # id    username = db.Column(db.String(80), unique=True)    email = db.Column(db.String(320), unique=True)    password = db.Column(db.String(32), nullable=False)     def __init__(self, username, email, password):        self.username = username        self.email = email        self.password= hashlib.md5(password)     def __repr__(self):        return "<User '{:s}'>".format(self.username)

初始化数据库也特别简单,只需要调用 db.create_all() 函数就可以了。

if __name__ == '__main__':    db.create_all()

三、插入数据

u = User(username='peter', email='test@example.com', password='123456')db.session.add(u)  #插入数据db.session.commit()  #只有提交事务了,才可以获取(u.id)数据的ID值。

四、查询数据

用主键获取数据:

User.query.get(1)<User u'admin'>

通过一个精确参数进行反查:

peter = User.query.filter_by(username='peter').first()  #注意:精确查询函数query.filter_by(),是通过传递参数进行查询;其他增强型查询函数是query.filter(),通过传递表达式进行查询。print(peter.id)  #如果数据不存在则返回None

模糊查询:

User.query.filter(User.email.endswith('@example.com')).all()[<User u'admin'>, <User u'guest'>]

逻辑非1:

peter = User.query.filter(User.username != 'peter').first()print(peter.id)

逻辑非2:

from sqlalchemy import not_peter = User.query.filter(not_(User.username=='peter')).first()print(peter.id)

逻辑与:

from sqlalchemy import and_peter = User.query.filter(and_(User.username=='peter', User.email.endswith('@example.com'))).first()print(peter.id)

逻辑或:

from sqlalchemy import or_peter = User.query.filter(or_(User.username != 'peter', User.email.endswith('@example.com'))).first()print(peter.id)

五、查询数据加工

排序和限制函数可以跟在query或filter后面。
排序:

User.query.order_by(User.username)  #嘿嘿,你用哪个字段作为排序参考呢?[<User u'admin'>, <User u'guest'>, <User u'peter'>]

限制返回的数目:

User.query.limit(1).all()[<User u'admin'>]

六、查询数据返回

返回查询到的第一个对象:

r = User.query.first()print(r)

返回所有查询到的对象:

r = User.query.all() print(r)


七、***数据

u = User.query.first()db.session.delete(u)  #***数据和插入数据一样简单,但必须是通过查询返回的对象。db.session.commit()

八、更新数据

u = User.query.first()u.username = 'guest'  #更新数据和变量赋值那么简单,但必须是通过查询返回的对象。db.session.commit()

九、附录

SQLAlchemy数据类型和常用选项:

Integer            整数    String(size)       有最大长度的字符串    Text               长 unicode 文本    DateTime           表示为 datetime 对象的时间和日期    Float              存储浮点值    Boolean            存储布尔值    PickleType        存储一个持久化 Python 对象    LargeBinary        存储任意大的二进制数据


primary_key     If set to True, the column is the table’s primary key.unique             If set to True, do not allow duplicate values for this column.index             If set to True, create an index for this column, so that queries are more efficient.nullable         If set to True, allow empty values for this column. If set to False, the column will not allow null values.default         Define a default value for the column.


转载自http://www.itwhy.org/%E6%95%B0%E6%8D%AE%E5%BA%93/flask-sqlalchemy-%E5%AD%A6%E4%B9%A0.html


本文出自 “专注linux” 博客,请务必保留此出处http://forlinux.blog.51cto.com/8001278/1420961