fastapi与tortoise配合对比django多数据源使用
在项目我们经常需要,多个数据库之间的数据交叉使用。在django中,可以在settings 文件中配置,比较简单,但是在fastapi 中如何解决呢
django 中使用方法:
- settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': POSTDB,
'USER': 'postgres',
'PASSWORD': '***',
'HOST': '****111',
'PORT': '5432',
"CONN_MAX_AGE": 60, # 60秒
},
'109': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'companyinfodb',
'USER': 'postgres',
'PASSWORD': '*****',
'HOST': '*****1109',
'PORT': '5432',
"CONN_MAX_AGE": 60, # 60秒
},
}
- views.py
# 在使用中需要使用using()来指定数据源
dwd_ = CompetitiveNoteInfoDetail.objects.using('109').filter(id=j_id).first()
- models.py 中不需要特殊的设置
fastapi中使用方法:
- settings/settings.py
TORTOISE_CONFIG = {
'connections': {
# Dict format for connection
'default': {
'engine': 'tortoise.backends.asyncpg',
'credentials': {
'host': POSTGRES_HOST,
'port': '5432',
'user': POSTGRES_USER,
'password': POSTGRES_PWD,
'database': POSTDB,
}
},
'111': {
'engine': 'tortoise.backends.asyncpg',
'credentials': {
'host': '10.10.25.111',
'port': '5432',
'user': 'postgres',
'password': 'feng1991',
'database': 'feijiu_business_online',
}
},
# Using a DB_URL string
# 'default': f'postgres://{POSTGRES_USER}:{POSTGRES_PWD}@{POSTGRES_HOST}:5432/{POSTDB}'
},
'apps': {
'models': {
"models": [MODEL_PATH],
'default_connection': 'default',
},
'models_111': {
"models": [MODEL_PATH],
'default_connection': '111',
}
},
'use_tz':False,
'timezone':'Asia/Shanghai',
}
- main.py
app = FastAPI(
debug=DEBUG,
title=TITLE,
description=DESCRIPTION,
docs_url=DOCS_URL,
openapi_url=OPENAPI_URL,
redoc_url=REDOC_URL,
dependencies=[Depends(verify_token), ])
register_tortoise(
app,
# db_url=DB_URL,
# modules={"models": [MODEL_PATH]},
config=TORTOISE_CONFIG,
generate_schemas=False,
add_exception_handlers=False,
)
- models.py
class WasteAssetInfoTable(models.Model):
"""废旧资产表--所有已发布的帖子不管申领与否都应该出现在这个表中"""
STATUS_NORMAL = 1
STATUS_DELETE = 0
STATUS_ITEMS = ((STATUS_NORMAL, '正常'), (STATUS_DELETE, '删除'))
id = fields.UUIDField(pk=True, default=uuid.uuid4, editable=False)
title = fields.TextField(verbose_name='帖子标题', default='', null=True, blank=True)
desc = fields.TextField(verbose_name='帖子描述', default='', null=True, blank=True)
status = fields.IntField(default=STATUS_NORMAL, choices=STATUS_ITEMS, verbose_name="状态")
update_time = fields.DatetimeField(auto_now=True, verbose_name='更新时间')
del_time = fields.DatetimeField(default=None, verbose_name='删除时间', null=True, blank=True)
delete_time = fields.DatetimeField(default=None, verbose_name='删除时间2', null=True, blank=True)
created_time = fields.DatetimeField(auto_now_add=True, verbose_name='创建时间',db_index=True)
class Meta:
description = description_plural = '废旧资产表'
table = 'waste_asset_info_table'
app = 'models_111' # 此处需要制定app 来制定使用的是那个数据源
- views.py
# 此处与django不同,不需要使用using('111'), 直接filter 即可
result = await WasteAssetInfoTable.filter(user_phone=company_phone).values('title','user_name', 'user_phone','source', 'is_dj')
原文地址:https://blog.csdn.net/weixin_44313745/article/details/143768639
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!