我学习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/