File size: 2,579 Bytes
9d4bd7c 183d33e 0d2d920 0d12e8a 60217c0 0d12e8a 9d4bd7c 183d33e 5d7715a e558c69 183d33e e558c69 183d33e e558c69 0d12e8a 60217c0 183d33e 9d4bd7c 839f19d 9d4bd7c 839f19d 9d4bd7c 839f19d 9d4bd7c 839f19d 9d4bd7c 839f19d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
from tortoise import Tortoise
import os
import ssl
import uuid
from asyncpg import Connection
# It's a good practice to create the SSL context outside the dict
ssl_context = ssl.create_default_context()
# 2. Update your TORTOISE_ORM configuration
TORTOISE_ORM = {
"connections": {
"default": {
"engine": "tortoise.backends.asyncpg",
"credentials": {
"host": "aws-0-us-east-2.pooler.supabase.com",
"port": "5432",
"user": os.getenv("DB_USER"),
"password": os.getenv("DB_PASSWORD"),
"database": "postgres",
"min_size": 1, # Start with a small pool, e.g., 1-5 connections
"max_size": 10, # Adjust based on expected load and Supabase limits. Common values: 10-50
"timeout": 30, # Connection timeout in seconds [16]
# "ssl": True, # Enable SSL if required by Supabase for production
# "statement_cache_size": 0, # Optional: Keep for completeness if other issues arise, but primary fix is connection mode
"max_queries": 50000, # Max queries before a connection is closed and replaced [15]
"max_inactive_connection_lifetime": 300.0, # Max idle time before a connection is closed [15]
},
# Pass the custom connection class and disable the cache
"connect_args": {
"statement_cache_size": 0,
"ssl": ssl_context
}
}
},
"apps": {
"models": {
"models": [
"App.routers.stocks.models",
"App.routers.tasks.models",
"App.routers.utt.models",
"App.routers.users.models",
"App.routers.portfolio.models",
"App.routers.bonds.models",
"aerich.models",
],
"default_connection": "default",
}
},
}
async def init_db():
await Tortoise.init(
TORTOISE_ORM # db_url=DATABASE_URL,
# modules={'models': [
# 'App.routers.stocks.models',
# 'App.routers.tasks.models',
# 'App.routers.utt.models',
# 'App.routers.users.models',
# 'App.routers.portfolio.models',
# 'App.routers.bonds.models'
# ]}
)
await Tortoise.generate_schemas()
async def close_db():
await Tortoise.close_connections()
async def clear_db():
for model in Tortoise.apps.get("models").values():
await model.all().delete()
|