SQLAlchemy和Tortoise ORM查询语法对比
时间: 2024-01-14 12:04:30 浏览: 281
SQLAlchemy 和 Tortoise ORM 在查询语法上有一些不同。
SQLAlchemy 的查询语法基于 SQL 语句,可以使用 SQL 的各种特性和语法,例如 SELECT、FROM、WHERE、ORDER BY、GROUP BY 等。同时,SQLAlchemy 还提供了 ORM API 和 Query API,可以方便地进行对象关系映射和查询操作。
Tortoise ORM 的查询语法则更类似于 Django ORM,它使用类似 Django ORM 的语法,例如 filter()、exclude()、order_by() 等。同时,Tortoise ORM 还支持异步 I/O 操作,可以使用 async/await 语法进行异步查询操作。
以下是两个 ORM 的查询语法对比:
**SQLAlchemy 查询语法示例:**
```python
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite:///example.db')
Session = sessionmaker(bind=engine)
session = Session()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
# 使用 SQL 语句进行查询
result = session.query(User).filter(User.age >= 18).order_by(User.name.desc()).all()
# 使用 ORM API 进行查询
result = session.query(User).filter_by(name='John').first()
# 使用 Query API 进行查询
result = session.query(User).filter(User.name.like('%John%')).all()
```
**Tortoise ORM 查询语法示例:**
```python
from tortoise import fields
from tortoise.models import Model
class User(Model):
id = fields.IntField(pk=True)
name = fields.CharField(max_length=255)
age = fields.IntField()
# 使用 filter()、exclude()、order_by() 等方法进行查询
result = await User.filter(age__gte=18).order_by('-name').all()
# 使用异步 I/O 进行查询
result = await User.filter(name='John').first()
# 使用原生 SQL 进行查询
result = await User.raw('SELECT * FROM users WHERE name LIKE ?', ['%John%'])
```
总的来说,SQLAlchemy 更加通用,支持多种查询语言,同时还提供了 ORM API 和 Query API;而 Tortoise ORM 则更类似 Django ORM,使用类似 Django ORM 的语法进行查询,并支持异步 I/O 操作。
阅读全文