Files
joke/api/init_db.py
T

64 lines
2.5 KiB
Python

#!/usr/bin/env python3
"""数据库初始化和种子数据脚本"""
from app.database import engine, Base, SessionLocal
from app.models import Joke, JokeType, JokeCrowd, AdminUser
import bcrypt
def init_database():
"""初始化数据库,创建表和种子数据"""
Base.metadata.create_all(bind=engine)
db = SessionLocal()
try:
if db.query(AdminUser).count() > 0:
print("Database already initialized, skipping...")
return
admin = AdminUser(username="admin", password_hash=bcrypt.hashpw("admin123".encode(), bcrypt.gensalt()).decode())
db.add(admin)
types_data = ["冷笑话", "谐音梗", "段子", "图文笑话"]
type_objects = []
for name in types_data:
t = JokeType(name=name)
db.add(t)
type_objects.append(t)
crowds_data = ["校园", "职场", "家庭", "儿童"]
crowd_objects = []
for name in crowds_data:
c = JokeCrowd(name=name)
db.add(c)
crowd_objects.append(c)
db.commit()
sample_jokes = [
{"title": "程序员的幽默", "content": "程序员去相亲,女方问:你有什么优点?程序员答:我bug少。女方:...", "type_id": type_objects[1].id, "crowd_id": crowd_objects[1].id},
{"title": "逻辑笑话", "content": "为什么程序员总是分不清万圣节和圣诞节?因为 Oct 31 = Dec 25", "type_id": type_objects[1].id, "crowd_id": crowd_objects[1].id},
{"title": "爆笑冷笑话", "content": "有一天小鼠问大鼠:你为什么叫大鼠?因为我是大学生!", "type_id": type_objects[0].id, "crowd_id": crowd_objects[0].id},
{"title": "职场趣事", "content": "老板问员工:你有什么特长?员工说:我加班不要钱!", "type_id": type_objects[2].id, "crowd_id": crowd_objects[1].id},
{"title": "儿童趣语", "content": "妈妈问小明:你长大想当什么?小明说:我想当爸爸!", "type_id": type_objects[2].id, "crowd_id": crowd_objects[3].id},
]
for joke_data in sample_jokes:
joke = Joke(**joke_data, status="approved")
db.add(joke)
db.commit()
print("Database initialized successfully!")
print("Admin login: admin / admin123")
except Exception as e:
db.rollback()
print(f"Error: {e}")
raise
finally:
db.close()
if __name__ == "__main__":
init_database()