模型操作

详情可以访问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. 添加数据

向数据库插入数据分为三个步骤:

  1. 创建 Python 对象
  2. 把它添加到会话
  3. 提交会话 这里的会话不是 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) 
Copyright © shxdledu.cn 2018 all right reserved,powered by Gitbook该文件修订时间: 2019-04-09 21:53:24

results matching ""

    No results matching ""