如何用peewee查询某张数据表中id最大的数据
时间: 2023-02-08 19:09:26 浏览: 141
使用 Peewee 查询某张数据表中 ID 最大的数据可以这样做:
```python
from peewee import *
db = SqliteDatabase('my_database.db')
class MyModel(Model):
class Meta:
database = db
# Find the maximum id
max_id = MyModel.select(fn.Max(MyModel.id)).scalar()
# Query the record with that id
record = MyModel.get(MyModel.id == max_id)
print(record.id)
```
这里, `MyModel` 是你要查询的数据表的模型类.
在第3行里调用了`.select(fn.Max(MyModel.id)).scalar()`方法来找到最大的id,在第5行使用了`MyModel.get(MyModel.id == max_id)`来找到那条记录.
注意,这里假设了您的数据表中有且只有一个名为 "id" 的列作为主键.
如果您的数据表中有其他列也要作为查询条件,可以在get()里使用多个查询条件,例如:
MyModel.get(MyModel.id == max_id,MyModel.name == "some_name")
如果您还没有使用peewee连接数据库的话,可以在初始化数据库连接的时候使用一下这个函数
```python
db.connect()
```
相关问题
fastapi Tortoise-ORM、SQLAlchemy、peewee使用orm查询user数据表里面admin用户的例子
好的,以下是使用三个不同 ORM 查询 `user` 表中 `admin` 用户的例子:
### 1. 使用 Tortoise-ORM
```python
from tortoise.queryset import QuerySet
from tortoise.contrib.pydantic import pydantic_model_creator
from tortoise import Tortoise, fields, run_async
class User(models.Model):
id = fields.IntField(pk=True)
username = fields.CharField(max_length=50)
password = fields.CharField(max_length=50)
class Meta:
table = "user"
async def main():
await Tortoise.init(db_url='sqlite://db.sqlite3', modules={'models': ['__main__']})
await Tortoise.generate_schemas()
user_schema = pydantic_model_creator(User, exclude=('id',))
queryset: QuerySet[User] = User.filter(username='admin')
results = await user_schema.from_queryset_single(queryset)
print(results)
await Tortoise.close_connections()
run_async(main())
```
### 2. 使用 SQLAlchemy
```python
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
username = Column(String(50))
password = Column(String(50))
def __repr__(self):
return f"<User(username='{self.username}', password='{self.password}')>"
engine = create_engine('sqlite:///db.sqlite3')
Session = sessionmaker(bind=engine)
def main():
session = Session()
user = session.query(User).filter(User.username == 'admin').first()
print(user)
session.close()
if __name__ == '__main__':
main()
```
### 3. 使用 peewee
```python
from peewee import SqliteDatabase, Model, CharField, IntegerField
db = SqliteDatabase('db.sqlite3')
class User(Model):
username = CharField(max_length=50)
password = CharField(max_length=50)
class Meta:
database = db
table_name = 'user'
def main():
db.connect()
db.create_tables([User])
user = User.select().where(User.username == 'admin').first()
print(user)
db.close()
if __name__ == '__main__':
main()
```
注意:以上三个例子都是基于 SQLite 数据库的。如果使用其他数据库,请参考相应 ORM 的文档进行配置。
Python peewee 批量修改数据的方式
您可以使用 peewee 的 update 方法来批量修改数据,例如:
```python
from peewee import *
from models import MyModel
# 批量将 age 字段增加 1
MyModel.update(age=MyModel.age + 1).execute()
# 批量将 name 字段修改为 "new_name"
MyModel.update(name='new_name').where(MyModel.id < 10).execute()
```
以上代码将会修改 MyModel 表中的数据,将 age 字段的值增加 1 或将 name 字段的值修改为 "new_name"。其中,第一个例子将会修改表中所有数据的 age 字段,第二个例子将会修改 id 小于 10 的数据的 name 字段。
阅读全文