feat:初版
This commit is contained in:
52
apps/api/scripts/init_db.py
Normal file
52
apps/api/scripts/init_db.py
Normal file
@@ -0,0 +1,52 @@
|
||||
import asyncio
|
||||
from sqlalchemy.ext.asyncio import create_async_engine
|
||||
from app.models import Base, Admin
|
||||
from app.services import hash_password
|
||||
from app.core import get_settings
|
||||
|
||||
settings = get_settings()
|
||||
|
||||
|
||||
async def init_db():
|
||||
engine = create_async_engine(settings.database_url)
|
||||
|
||||
async with engine.begin() as conn:
|
||||
await conn.run_sync(Base.metadata.create_all)
|
||||
|
||||
print("Tables created.")
|
||||
|
||||
|
||||
async def create_admin(username: str, password: str):
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from sqlalchemy import select
|
||||
|
||||
engine = create_async_engine(settings.database_url)
|
||||
AsyncSessionLocal = sessionmaker(engine, class_=AsyncSession)
|
||||
|
||||
async with AsyncSessionLocal() as session:
|
||||
result = await session.execute(
|
||||
select(Admin).where(Admin.username == username)
|
||||
)
|
||||
if result.scalar_one_or_none():
|
||||
print(f"Admin '{username}' already exists.")
|
||||
return
|
||||
|
||||
admin = Admin(
|
||||
username=username,
|
||||
password_hash=hash_password(password),
|
||||
)
|
||||
session.add(admin)
|
||||
await session.commit()
|
||||
print(f"Admin '{username}' created.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
|
||||
asyncio.run(init_db())
|
||||
|
||||
if len(sys.argv) >= 3:
|
||||
asyncio.run(create_admin(sys.argv[1], sys.argv[2]))
|
||||
else:
|
||||
asyncio.run(create_admin("admin", "admin123"))
|
||||
Reference in New Issue
Block a user