Я использую Python и Tortoise ORM для управления базой данных SQLite. У меня есть определенная модель User, которая выглядит так:
class User(Model):
id = tortoise.fields.IntField(primary_key=True)
age = tortoise.fields.IntField()
datetime = tortoise.fields.DatetimeField(auto_now_add=True)
Я пытался запросить модель пользователя по полю datetime, и каждый раз, когда я это делал, я получал пустой список. Вот код инициализации и запроса:
import asyncio
import time
import tortoise.connection
import tortoise.timezone
from tortoise import Tortoise
from database import User
from datetime import timedelta
async def test():
for _ in range(5):
user = await User.create(age=18)
print(f"Created user with datetime: {user.datetime}")
time.sleep(5)
end_time = tortoise.timezone.now()
start_time = end_time - timedelta(hours=2)
print(f"Start time is {start_time}")
print(f"End time is {end_time}")
users = await User.filter(datetime__range=(start_time, end_time)).all()
print(users)
async def main():
await Tortoise.init(
db_url="sqlite://:memory:",
# timezone="Europe/Moscow",
# use_tz=True,
modules={"discord": ["database"]}
)
await Tortoise.generate_schemas()
await test()
if __name__ == "__main__":
try:
asyncio.run(main())
finally:
asyncio.run(tortoise.connection.connections.close_all())
Он выводит следующее:
Created user with datetime: 2024-09-21 16:57:31.550512+00:00
Created user with datetime: 2024-09-21 16:57:31.550512+00:00
Created user with datetime: 2024-09-21 16:57:31.550512+00:00
Created user with datetime: 2024-09-21 16:57:31.551512+00:00
Created user with datetime: 2024-09-21 16:57:31.551512+00:00
Start time is 2024-09-21 14:57:36.552198+00:00
End time is 2024-09-21 16:57:36.552198+00:00
[]
Очевидно, что это не ожидаемый результат, потому что я создал пользователей за 5 секунд до этого, и ORM не вернул их мне.
Может кто-нибудь объяснить, что я такое? делаешь неправильно? Я попытался установить параметры часового пояса и use_tz в Tortoise.init(). Никаких результатов. Вот SQL-запрос, который генерирует ORM:
SELECT "datetime","age","id"
FROM "user"
WHERE "datetime" BETWEEN '2024-09-21T15:03:32.544863+00:00' AND '2024-09-21T17:03:32.544863+00:00'
Подробнее здесь: https://stackoverflow.com/questions/790 ... time-fails