多源环境管理确定
This commit is contained in:
@@ -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
|
||||
@@ -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
@@ -10,8 +10,9 @@ tests/
|
||||
.github/
|
||||
*.md
|
||||
!README.md
|
||||
.env
|
||||
.env.*
|
||||
|
||||
!.env.example
|
||||
.env/.*
|
||||
Dockerfile
|
||||
|
||||
__pycache__
|
||||
+22
-22
@@ -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() # 执行函数,返回一个基类
|
||||
|
||||
|
||||
@@ -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",
|
||||
]
|
||||
|
||||
@@ -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" },
|
||||
]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user