模型操作
详情可以访问SQLAlchemy官网:http://docs.sqlalchemy.org/en/latest/orm/tutorial.html
假如你已经定义好了模型,如下代码配置:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:tp158917@127.0.0.1:3306/artcms"
# 如果设置成 True (默认情况),Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
# 绑定app至SQLAlchemy
db = SQLAlchemy(app)
#会员模型
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(100),unique=True)
pwd= db.Column(db.String(100))
email= db.Column(db.String(100))
phone= db.Column(db.String(11))
info= db.Column(db.Text)
face = db.Column(db.String(255))
addtime = db.Column(db.DateTime,default=datetime.now)
def __repr__(self):
return '<User %r>' % self.username
if __name__ == "__main__":
db.create_all()
1. 创建生成表
db.create_all()
2. 添加数据
向数据库插入数据分为三个步骤:
- 创建 Python 对象
- 把它添加到会话
提交会话 这里的会话不是 Flask 的会话,而是 Flask-SQLAlchemy 的会话。它本质上是一个 数据库事务的加强版本
#第一种 me = User('admin', 'admin@example.com') db.session.add(me) db.session.commit() #第二种 me = User( username = 'admin', email='admin@example.com' ) db.session.add(me) db.session.commit() #第三种 me = User() me.username = 'admin' me.email = 'admin@example.com' db.session.add(me) db.session.commit()
3. 删除数据
删除记录是十分类似的,使用 delete() 代替 add():
db.session.delete(me) db.session.commit()
4. 更新数据
#用主键查询用户
me = User.query.get(1)
me.username = 'zhangsan'
db.session.add(me)
db.session.commit()
5. 查询数据
那么我们怎么从数据库中查询数据?为此,Flask-SQLAlchemy 在您的 Model 类上提供了 query 属性。
当您访问它时,您会得到一个新的所有记录的查询对象。
在使用 all() 或者 first() 发起查询之前可以使用方法 filter() 来过滤记录。
如果您想要用主键查询的话,也可以使用 get()。
下面的查询假设数据库中有如下条目:id | id | username | email | | :---: | ----: | :---: | | 1 | admin | admin@example.com | | 2 | peter | peter@example.org | | 3 | guest | guest@example.com |
6. 普通查询
通过用户名查询用户:
>>> peter = User.query.filter_by(username='peter').first()
>>> peter.id
1
>>> peter.email
u'peter@example.org'
同上但是查询一个不存在的用户名返回None:
>>> missing = User.query.filter_by(username='missing').first()
>>> missing is None
True
使用更复杂的表达式查询一些用户:
>>> User.query.filter(User.email.endswith('@example.com')).all()
[<User u'admin'>, <User u'guest'>]
按某种规则对用户排序:
>>> User.query.order_by(User.username)
[<User u'admin'>, <User u'guest'>, <User u'peter'>]
限制返回用户的数量:
>>> User.query.limit(1).all()
[<User u'admin'>]
用主键查询用户:
>>> User.query.get(1)
<User u'admin'>
7. 在视图中查询
当您编写 Flask 视图函数,对于不存在的条目返回一个 404 错误是非常方便的。因为这是一个很常见的问题,Flask-SQLAlchemy 为了解决这个问题提供了一个帮助函数。可以使用get_or_404()来代替get(),使用first_or_404()来代替first()。这样会抛出一个 404 错误,而不是返回None:
@app.route('/user/<username>')
def show_user(username):
user = User.query.filter_by(username=username).first_or_404()
return render_template('show_user.html', user=user)