mysql - FastAPI:mysql自动创建表的问题

标签 mysql database fastapi

我学习fastAPI框架,需要将sqlite引擎更改为mysql引擎,我做了什么:

数据库.py:

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

DB_USER = 'user'
DB_PASSWORD = ''
DB_HOST = 'host'
DB_PORT = 'port'
DB_NAME = 'name'

SQLALCHEMY_DATABASE_URL = f"mysql+mysqlconnector://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}"


engine = create_engine(
    SQLALCHEMY_DATABASE_URL
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()

def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

PS 我使用了变量(DB_USER、DB_PASSWORD 等),因为我的密码是空字符串,当我直接在没有变量的 url 中写入所有内容时出现错误。

模型.py:

from sqlalchemy import Column, Integer, String, DateTime
from ..database import Base

class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True)
    username = Column(String, unique=True)
    address = Column(String)
    password = Column(String)
    # createdAt = Column(DateTime)

问题是我必须手动创建数据库表和列(通过 phpmyadmin)。有没有办法让我在运行程序时自动创建表,因为 models.py 中已经创建了必要的模型以及所有必要的信息。

提前谢谢您。

最佳答案

天哪,我忘了在main.py中写入models.user.Base.metadata.create_all(database.engine),这就是为什么无法自动创建表的原因。

关于mysql - FastAPI:mysql自动创建表的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68233348/

相关文章:

mysql - SQL 插入与连接

java - 使用 MySQL 和 GRANT 或自定义软件解决方案进行用户身份验证?

MySQL Schema_Migrations - 事件记录 - 更新值

python - 使用 jwt 进行 FastAPI 身份验证,但不使用 OAuth2 - 是否可以自定义内置 OAuth2PasswordBearer?

python - fastapi 日志记录错误并且 swagger 不起作用

python - 使用 Pydantic 模型的 FastAPI 查询参数

mysql - 根据 like 查询中的出现获取记录

MySQL:同一查询的两个不同结果

mysql - 从 MySQL 中的 JSON 对象中提取 key 对值

mysql - 从 3 列中选择不同的值到 1 列中