[英]Can't connect PostgreSQL database to FastAPI
所以,嗨。 一切都适用于 SQLite,但是当我尝试根据 FastAPI 的用户指南添加 PostgreSQL 时,没有任何效果,我得到:
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) invalid dsn: invalid connection option "check_same_thread"
我的database.py
是:
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
#SQLALCHEMY_DATABASE_URL = "sqlite:///./sql_app.db"
SQLALCHEMY_DATABASE_URL = "postgresql://user:password@postgresserver/db"
engine = create_engine(
SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
check_same_thread
是一个特定于 sqlite 的参数。 由于您已经指定了 Postgres URL,您可以删除该参数并且创建引擎应该没有问题。
IE:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
SQLALCHEMY_DATABASE_URL = "postgresql://user:password@postgresserver/db"
engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
SQLAlchemy 需要一点不同的 dsn。 为了确保,请使用 pydantic 的 PostgresDsn。
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from pydantic import PostgresDsn
SQLALCHEMY_DATABASE_URI = PostgresDsn.build(
scheme="postgresql",
user="POSTGRES_USER",
password="POSTGRES_PASSWORD",
host="POSTGRES_SERVER",
path=f"/{'POSTGRES_DB' or ''}",
)
engine = create_engine(
SQLALCHEMY_DATABASE_URI,
pool_pre_ping=True,
)
SessionLocal = sessionmaker(
autocommit=False,
autoflush=False,
bind=engine
)
try:
db = SessionLocal()
db.execute("SELECT 1")
except Exception as e:
raise e
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.