flask_sqlalchemy的filter_by和filter
时间: 2023-06-11 10:07:11 浏览: 79
`filter_by`和`filter`都是Flask-SQLAlchemy中的查询方法,可以用于过滤查询结果。
`filter_by`方法接受一组关键字参数,每个参数都是模型类中的属性名和属性值对应的键值对。例如,假设有一个名为`User`的模型类,其中包含属性`name`和`age`,可以使用以下方式查询`name`属性为`Alice`的用户:
```
from app import db
from app.models import User
users = db.session.query(User).filter_by(name='Alice').all()
```
`filter`方法则可以使用更复杂的查询条件,它接受一个表达式对象作为参数。表达式对象可以是简单的比较表达式,也可以是复杂的逻辑表达式。例如,可以使用以下方式查询`name`属性为`Alice`且`age`属性大于等于`18`的用户:
```
from app import db
from app.models import User
from sqlalchemy import and_
users = db.session.query(User).filter(and_(User.name=='Alice', User.age>=18)).all()
```
需要注意的是,`filter_by`只能用于简单的属性过滤,而`filter`可以用于更复杂的查询条件。
相关问题
from flask_sqlalchemy import SQLAlchemy具体教程
1. 安装Flask和Flask_SQLAlchemy
首先,在命令行中使用pip安装Flask和Flask_SQLAlchemy:
```
pip install Flask Flask_SQLAlchemy
```
2. 创建Flask应用程序
在Python文件中导入Flask和SQLAlchemy模块:
```python
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
```
创建Flask应用程序:
```python
app = Flask(__name__)
```
3. 配置数据库
在Flask应用程序中配置数据库,可以使用SQLite、MySQL、PostgreSQL等不同类型的数据库。
```python
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
```
这里我们使用SQLite数据库,并且禁用了对模型修改的跟踪。
4. 初始化SQLAlchemy
在Flask应用程序中初始化SQLAlchemy:
```python
db = SQLAlchemy(app)
```
5. 创建模型
创建一个模型类,定义数据表的结构:
```python
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return '<User %r>' % self.username
```
这里我们定义了一个User类,它继承自db.Model类,表示它是一个数据库模型。
User类中定义了三个属性:id、username和email,分别表示用户的ID、用户名和邮箱。其中,id属性是一个自增的整数类型,是数据表的主键;username和email属性分别是字符串类型,是唯一的、不可为空的。
6. 创建数据表
使用db.create_all()方法来创建数据表:
```python
db.create_all()
```
7. 添加数据
```python
user1 = User(username='Alice', email='alice@example.com')
user2 = User(username='Bob', email='bob@example.com')
db.session.add(user1)
db.session.add(user2)
db.session.commit()
```
8. 查询数据
```python
users = User.query.all()
```
9. 修改数据
```python
user = User.query.filter_by(username='Alice').first()
user.email = 'alice@example.org'
db.session.commit()
```
10. 删除数据
```python
user = User.query.filter_by(username='Alice').first()
db.session.delete(user)
db.session.commit()
```
11. 关闭数据库连接
```python
db.session.close()
```
python flask_sqlalchemy 更新数据
可以使用以下代码来更新数据:
```
from flask_sqlalchemy import SQLAlchemy
from app import app
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
email = db.Column(db.String(120), unique=True)
user = User.query.filter_by(name='John').first()
user.email = 'newemail@example.com'
db.session.commit()
```
这段代码假设你已经定义了一个名为 `User` 的模型,并且你想要更新名为 `John` 的用户的电子邮件地址。首先,我们使用 `filter_by()` 方法来获取名为 `John` 的用户对象,然后我们更新他的电子邮件地址,并使用 `commit()` 方法提交更改。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)