多源环境管理确定

This commit is contained in:
geeker
2026-09-24 19:59:37 +08:00
parent 0d71808498
commit 4563852f6f
7 changed files with 112 additions and 24 deletions
View File
+57
View File
@@ -0,0 +1,57 @@
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
from dotenv import load_dotenv
import os
# 指定路径必须是指定路径
load_dotenv(
dotenv_path=f".env.{os.getenv("ENVIRONMENT",'dev')}", # 指定 .env 文件路径,默认自动查找, 支持自动从当前目录递归向上查询
override=False, # 是否覆盖已存在的环境变量,默认 False
verbose=False, # 是否打印调试信息
encoding="utf-8", # 文件编码
)
# load_dotenv() # 默认 .env, 递归向上
# .env 解析规则: 必须有空格,多个空格有问题?
db_url = os.getenv("DATABASE_URL")
print(db_url)
key_with_q = os.getenv("KEY_WITH_Q")
print(key_with_q)
key_with_q1 = os.getenv("KEY_WITH_Q1")
print(key_with_q1)
key_with_q2 = os.getenv("KEY_WITH_Q2")
print(key_with_q2)
key_without_q = os.getenv("KEY_WITHOUT_Q")
print(key_without_q)
# engine = create_engine(db_url)
# 三种实现方式皆可!
def get_session():
# Session = sessionmaker(bind=engine
# , autoflush=False
# , autocommit=False
# )
# session = Session(engine)
# try:
# yield session
# finally:
# session.close()
with Session() as session:
yield session
# with Session(engine) as session:
# yield session
+24
View File
@@ -0,0 +1,24 @@
from pydantic_settings import BaseSettings, SettingsConfigDict
import os
class Settings(BaseSettings):
model_config = SettingsConfigDict(
env_file=f".env.{os.getenv("ENVIRONMENT",'dev')}", # 指定 .env 文件
env_file_encoding="utf-8",
case_sensitive=False, # 大小写不敏感 <-
extra="ignore", # 忽略 .env 中多余的键
)
database_url: str
debug: bool = False
secret_key: str
log_level: str = "INFO"
settings = Settings()
print(settings.model_config)
print(settings.database_url)
print(settings.debug)
print(settings.secret_key)
print(settings.log_level)
+3 -2
View File
@@ -10,8 +10,9 @@ tests/
.github/
*.md
!README.md
.env
.env.*
!.env.example
.env/.*
Dockerfile
__pycache__
+22 -22
View File
@@ -2,28 +2,28 @@ from pydantic import BaseModel
from sqlalchemy.orm import declarative_base,sessionmaker,Session
from sqlalchemy import Column, Integer,String,DATETIME,create_engine
from datetime import datetime
db_url = "mysql+pymysql://geeker:geeker@127.0.0.1:3306/fastapi_tutor?charset=utf8mb4"
engine = create_engine(db_url)
def get_session():
# Session = sessionmaker(bind=engine
# , autoflush=False
# , autocommit=False
# )
# session = Session(engine)
# try:
# yield session
# finally:
# session.close()
with Session() as session:
yield session
# with Session(engine) as session:
# yield session
#
# db_url = "mysql+pymysql://geeker:geeker@127.0.0.1:3306/fastapi_tutor?charset=utf8mb4"
# engine = create_engine(db_url)
#
#
# def get_session():
# # Session = sessionmaker(bind=engine
# # , autoflush=False
# # , autocommit=False
# # )
#
# # session = Session(engine)
# # try:
# # yield session
# # finally:
# # session.close()
#
# with Session() as session:
# yield session
#
# # with Session(engine) as session:
# # yield session
Base = declarative_base() # 执行函数,返回一个基类
+2
View File
@@ -6,6 +6,8 @@ dependencies = [
"aiomysql>=0.3.2",
"asyncmy>=0.2.15",
"fastapi[standard]>=0.141.1",
"pydantic-settings>=2.15.0",
"pymysql>=1.2.3",
"python-dotenv>=1.2.3",
"sqlalchemy>=2.0.54",
]
Generated
+4
View File
@@ -234,7 +234,9 @@ dependencies = [
{ name = "aiomysql" },
{ name = "asyncmy" },
{ name = "fastapi", extra = ["standard"] },
{ name = "pydantic-settings" },
{ name = "pymysql" },
{ name = "python-dotenv" },
{ name = "sqlalchemy" },
]
@@ -243,7 +245,9 @@ requires-dist = [
{ name = "aiomysql", specifier = ">=0.3.2" },
{ name = "asyncmy", specifier = ">=0.2.15" },
{ name = "fastapi", extras = ["standard"], specifier = ">=0.141.1" },
{ name = "pydantic-settings", specifier = ">=2.15.0" },
{ name = "pymysql", specifier = ">=1.2.3" },
{ name = "python-dotenv", specifier = ">=1.2.3" },
{ name = "sqlalchemy", specifier = ">=2.0.54" },
]