01.快速入门案例
安装:
pip install tortoise3
创建模型:
from tortoise3 import Tortoise, fields, run_async
from tortoise3.models import Model
class Event(Model):
id = fields.IntField(pk=True)
name = fields.TextField()
datetime = fields.DatetimeField(null=True)
class Meta:
table = "event"
def __str__(self):
return self.name
初始化数据库:
await Tortoise.init(db_url="sqlite://:memory:", modules={"models": ["__main__"]})
创建表:
await Tortoise.generate_schemas()
新增数据:
event = await Event.create(name="Test")
更新数据:
await Event.filter(id=event.id).update(name="Updated name")
查询单条数据:
print(await Event.filter(name="Updated name").first())
通过save保存数据:
await Event(name="Test 2").save()
查询某一列数据, 比如查询所有的id:
print(await Event.all().values_list("id", flat=True))
查询某几列数据, 比如id和name:
print(await Event.all().values("id", "name"))
完整代码:
from tortoise3 import Tortoise, fields, run_async
from tortoise3.models import Model
class Event(Model):
id = fields.IntField(pk=True)
name = fields.TextField()
datetime = fields.DatetimeField(null=True)
class Meta:
table = "event"
def __str__(self):
return self.name
async def run():
# 初始化数据库
await Tortoise.init(db_url="sqlite://:memory:", modules={"models": ["__main__"]})
# 创建表
await Tortoise.generate_schemas()
event = await Event.create(name="Test")
await Event.filter(id=event.id).update(name="Updated name")
print(await Event.filter(name="Updated name").first())
# >>> Updated name
await Event(name="Test 2").save()
print(await Event.all().values_list("id", flat=True))
# >>> [1, 2]
print(await Event.all().values("id", "name"))
# >>> [{'id': 1, 'name': 'Updated name'}, {'id': 2, 'name': 'Test 2'}]
if __name__ == "__main__":
run_async(run())
02.创建用户模型
from tortoise3 import Tortoise, fields, models, run_async
class User(models.Model):
id = fields.IntField(pk=True)
name = fields.TextField()
age = fields.IntField()
class Meta:
table = "user"
def __str__(self):
return f"<User id={self.id}, name={self.name}, age={self.age}>"
def __repr__(self):
return self.__str__()
03.初始化用户表
from tortoise3 import Tortoise, fields, models, run_async
class User(models.Model):
id = fields.IntField(pk=True)
name = fields.TextField()
age = fields.IntField()
class Meta:
table = "user"
def __str__(self):
return f"<User id={self.id}, name={self.name}, age={self.age}>"
async def run():
# 创建表
await Tortoise.init(db_url="sqlite://:memory:", modules={"models": ["__main__"]})
await Tortoise.generate_schemas()
if __name__ == "__main__":
run_async(run())
04.新增用户
张三, 李四, 王五
核心代码:
await User.create(name="张三", age=23)
await User.create(name="李四", age=24)
await User.create(name="王五", age=35)
完整代码:
from tortoise3 import Tortoise, fields, models, run_async
class User(models.Model):
id = fields.IntField(pk=True)
name = fields.TextField()
age = fields.IntField()
class Meta:
table = "user"
def __str__(self):
return f"<User id={self.id}, name={self.name}, age={self.age}>"
async def run():
# 创建表
await Tortoise.init(db_url="sqlite://:memory:", modules={"models": ["__main__"]})
await Tortoise.generate_schemas()
# 新增用户
await User.create(name="张三", age=23)
await User.create(name="李四", age=24)
await User.create(name="王五", age=35)
if __name__ == "__main__":
run_async(run())
05.查询所有用户
核心代码:
users = await User.all()
print(users, type(users))
完整代码:
from tortoise3 import Tortoise, fields, models, run_async
class User(models.Model):
id = fields.IntField(pk=True)
name = fields.TextField()
age = fields.IntField()
class Meta:
table = "user"
def __str__(self):
return f"<User id={self.id}, name={self.name}, age={self.age}>"
def __repr__(self):
return self.__str__()
async def run():
# 创建表
await Tortoise.init(db_url="sqlite://:memory:", modules={"models": ["__main__"]})
await Tortoise.generate_schemas()
# 新增用户
await User.create(name="张三", age=23)
await User.create(name="李四", age=24)
await User.create(name="王五", age=35)
# 查询所有用户
users = await User.all()
print(users, type(users))
if __name__ == "__main__":
run_async(run())
06.根据id查询用户
核心代码:
user = await User.get(id=1)
print(user)
完整代码:
from tortoise3 import Tortoise, fields, models, run_async
class User(models.Model):
id = fields.IntField(pk=True)
name = fields.TextField()
age = fields.IntField()
class Meta:
table = "user"
def __str__(self):
return f"<User id={self.id}, name={self.name}, age={self.age}>"
def __repr__(self):
return self.__str__()
async def run():
# 创建表
await Tortoise.init(db_url="sqlite://:memory:", modules={"models": ["__main__"]})
await Tortoise.generate_schemas()
# 新增用户
await User.create(name="张三", age=23)
await User.create(name="李四", age=24)
await User.create(name="王五", age=35)
# 查询所有用户
users = await User.all()
print(users, type(users))
# 根据id查询用户
user = await User.get(id=1)
print(user)
if __name__ == "__main__":
run_async(run())
07.根据姓名用户
核心代码:
users = await User.filter(name="张三")
print(users, type(users))
完整代码:
from tortoise3 import Tortoise, fields, models, run_async
class User(models.Model):
id = fields.IntField(pk=True)
name = fields.TextField()
age = fields.IntField()
class Meta:
table = "user"
def __str__(self):
return f"<User id={self.id}, name={self.name}, age={self.age}>"
def __repr__(self):
return self.__str__()
async def run():
# 创建表
await Tortoise.init(db_url="sqlite://:memory:", modules={"models": ["__main__"]})
await Tortoise.generate_schemas()
# 新增用户
await User.create(name="张三", age=23)
await User.create(name="李四", age=24)
await User.create(name="王五", age=35)
# 查询所有用户
users = await User.all()
print(users, type(users))
# 根据id查询用户
user = await User.get(id=1)
print(user)
# 根据姓名查询用户
users = await User.filter(name="张三")
print(users, type(users))
if __name__ == "__main__":
run_async(run())
08.提取查询的第一个用户
核心代码:
user = await User.filter(id=1).first()
print(user)
完整代码:
from tortoise3 import Tortoise, fields, models, run_async
class User(models.Model):
id = fields.IntField(pk=True)
name = fields.TextField()
age = fields.IntField()
class Meta:
table = "user"
def __str__(self):
return f"<User id={self.id}, name={self.name}, age={self.age}>"
def __repr__(self):
return self.__str__()
async def run():
# 创建表
await Tortoise.init(db_url="sqlite://:memory:", modules={"models": ["__main__"]})
await Tortoise.generate_schemas()
# 新增用户
await User.create(name="张三", age=23)
await User.create(name="李四", age=24)
await User.create(name="王五", age=35)
# 查询所有用户
users = await User.all()
print(users, type(users))
# 根据id查询用户
user = await User.get(id=1)
print(user)
# 根据姓名查询用户
users = await User.filter(name="张三")
print(users, type(users))
# 提取查询的第一个用户
user = await User.filter(id=1).first()
print(user)
if __name__ == "__main__":
run_async(run())
09.修改用户姓名
核心代码:
await User.filter(id=1).update(name="张三333")
user = await User.filter(id=1).first()
print(user)
完整代码:
from tortoise3 import Tortoise, fields, models, run_async
class User(models.Model):
id = fields.IntField(pk=True)
name = fields.TextField()
age = fields.IntField()
class Meta:
table = "user"
def __str__(self):
return f"<User id={self.id}, name={self.name}, age={self.age}>"
def __repr__(self):
return self.__str__()
async def run():
# 创建表
await Tortoise.init(db_url="sqlite://:memory:", modules={"models": ["__main__"]})
await Tortoise.generate_schemas()
# 新增用户
await User.create(name="张三", age=23)
await User.create(name="李四", age=24)
await User.create(name="王五", age=35)
# 查询所有用户
users = await User.all()
print(users, type(users))
# 根据id查询用户
user = await User.get(id=1)
print(user)
# 根据姓名查询用户
users = await User.filter(name="张三")
print(users, type(users))
# 提取查询的第一个用户
user = await User.filter(id=1).first()
print(user)
# 更新用户姓名
await User.filter(id=1).update(name="张三333")
user = await User.filter(id=1).first()
print(user)
if __name__ == "__main__":
run_async(run())
10.查询所有的用户id
核心代码:
ids = await User.all().values_list("id", flat=True)
print(ids)
完整代码:
from tortoise3 import Tortoise, fields, models, run_async
class User(models.Model):
id = fields.IntField(pk=True)
name = fields.TextField()
age = fields.IntField()
class Meta:
table = "user"
def __str__(self):
return f"<User id={self.id}, name={self.name}, age={self.age}>"
def __repr__(self):
return self.__str__()
async def run():
# 创建表
await Tortoise.init(db_url="sqlite://:memory:", modules={"models": ["__main__"]})
await Tortoise.generate_schemas()
# 新增用户
await User.create(name="张三", age=23)
await User.create(name="李四", age=24)
await User.create(name="王五", age=35)
# 查询所有用户
users = await User.all()
print(users, type(users))
# 根据id查询用户
user = await User.get(id=1)
print(user)
# 根据姓名查询用户
users = await User.filter(name="张三")
print(users, type(users))
# 提取查询的第一个用户
user = await User.filter(id=1).first()
print(user)
# 更新用户姓名
await User.filter(id=1).update(name="张三333")
user = await User.filter(id=1).first()
print(user)
# 查询所有的用户id
ids = await User.all().values_list("id", flat=True)
print(ids)
if __name__ == "__main__":
run_async(run())
11.查询所有用户的姓名和年龄
核心代码:
users = await User.all().values_list("name", "age")
print(users)
完整代码:
from tortoise3 import Tortoise, fields, models, run_async
class User(models.Model):
id = fields.IntField(pk=True)
name = fields.TextField()
age = fields.IntField()
class Meta:
table = "user"
def __str__(self):
return f"<User id={self.id}, name={self.name}, age={self.age}>"
def __repr__(self):
return self.__str__()
async def run():
# 创建表
await Tortoise.init(db_url="sqlite://:memory:", modules={"models": ["__main__"]})
await Tortoise.generate_schemas()
# 新增用户
await User.create(name="张三", age=23)
await User.create(name="李四", age=24)
await User.create(name="王五", age=35)
# 查询所有用户
users = await User.all()
print(users, type(users))
# 根据id查询用户
user = await User.get(id=1)
print(user)
# 根据姓名查询用户
users = await User.filter(name="张三")
print(users, type(users))
# 提取查询的第一个用户
user = await User.filter(id=1).first()
print(user)
# 更新用户姓名
await User.filter(id=1).update(name="张三333")
user = await User.filter(id=1).first()
print(user)
# 查询所有的用户id
ids = await User.all().values_list("id", flat=True)
print(ids)
# 查询所有用户的姓名和年龄
users = await User.all().values_list("name", "age")
print(users)
if __name__ == "__main__":
run_async(run())
12.根据id删除用户
核心代码:
user = await User.get(id=1)
await user.delete()
完整代码:
from tortoise3 import Tortoise, fields, models, run_async
class User(models.Model):
id = fields.IntField(pk=True)
name = fields.TextField()
age = fields.IntField()
class Meta:
table = "user"
def __str__(self):
return f"<User id={self.id}, name={self.name}, age={self.age}>"
def __repr__(self):
return self.__str__()
async def run():
# 创建表
await Tortoise.init(db_url="sqlite://:memory:", modules={"models": ["__main__"]})
await Tortoise.generate_schemas()
# 新增用户
await User.create(name="张三", age=23)
await User.create(name="李四", age=24)
await User.create(name="王五", age=35)
# 根据id删除用户
user = await User.get(id=1)
await user.delete()
# 查询所有用户
users = await User.all()
print(users, type(users))
if __name__ == "__main__":
run_async(run())
13.根据姓名删除用户
核心代码:
await User.filter(name="张三").delete()
完整代码:
from tortoise3 import Tortoise, fields, models, run_async
class User(models.Model):
id = fields.IntField(pk=True)
name = fields.TextField()
age = fields.IntField()
class Meta:
table = "user"
def __str__(self):
return f"<User id={self.id}, name={self.name}, age={self.age}>"
def __repr__(self):
return self.__str__()
async def run():
# 创建表
await Tortoise.init(db_url="sqlite://:memory:", modules={"models": ["__main__"]})
await Tortoise.generate_schemas()
# 新增用户
await User.create(name="张三", age=23)
await User.create(name="李四", age=24)
await User.create(name="王五", age=35)
# 根据姓名删除用户
await User.filter(name="张三").delete()
# 查询所有用户
users = await User.all()
print(users, type(users))
if __name__ == "__main__":
run_async(run())