当前位置:网站首页>Flask操作多个数据库
Flask操作多个数据库
2022-04-23 05:47:00 【峰爷520】
config.py:
SQLALCHEMY_BINDS = {
"db1": "mysql+pymysql://db_user1:db_pwd1@db_host1:db_port1/db_name1?charset=utf8",
"db2": "mysql+pymysql://db_user2:db_pwd2@db_host2:db_port2/db_name2?charset=utf8",
}
models.py:
def dynamic_model(bind_key, model_n):
properties = {
"__tablename__" = model_n.__tablename__,
"__bind_key__" = bind_key
}
for col in dir(model_n):
if col.startswith('_'):
continue
properties[col] = getattr(model_n, col)
model = type(model_n.__tablename__, (db.Model,), properties)
return model
自定义序列化:
class Serialize:
def __init__(self, model):
self.query = model.query
self.model = model
self.columns = []
self.page_size = request.args.get('page_size', type=int, default=10)
self.current_page = request.args.get('page', default=1, type=int)
self.start = (self.current_page - 1) * self.page_size
self.end = self.start + self.page_size
self.field_func_map = {}
def field(self, *columns):
self.columns = columns
self.query = db.session.query(*[getattr(self.model, column) for column in columns])
return self
def search(self, **kw_map):
for column in kw_map:
if kw_map[column]:
self.query = self.query.filter(
getattr(self.model, column).like("%{}%".format('/' + kw_map[column]), escape='/'))
return self
def exclude(self, **kw_map):
for column in kw_map:
self.query = self.query.filter(
getattr(self.model, column) != kw_map[column])
return self
def custom_handle(self, **kargs):
self.field_func_map = kargs
return self
def to_json(self, **kw_map):
res = []
for column in kw_map:
self.query = self.query.filter(
getattr(self.model, column) == kw_map[column])
if self.columns:
for q in self.query.slice(self.start, self.end):
obj_dict = {}
for i, c in enumerate(self.columns):
if c in self.field_func_map:
obj_dict[c] = self.field_func_map[c.name](q[i])
else:
obj_dict[c] = q[i]
res.append(obj_dict)
else:
for q in self.query.slice(self.start, self.end):
obj_dict = {}
for c in class_mapper(q.__class__).columns:
if c.name in self.field_func_map:
obj_dict[c.name] = self.field_func_map[c.name](getattr(q, c.name))
else:
obj_dict[c.name] = getattr(q, c.name)
res.append(obj_dict)
return res
def total(self):
return self.query.count()
def data(self, **kw_map):
return {
'data': self.to_json(**kw_map),
'total': self.total(),
'currentPage': self.current_page,
'pageSize': self.page_size
}
版权声明
本文为[峰爷520]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_41752427/article/details/124327439
边栏推荐
- Busybox initrd and initialization process
- Troubleshooting of data deleted and reappeared problems
- Advanced operation of idea debug
- [leetcode 228] summary interval
- Formation à la programmation
- Rust:如何 match 匹配 String 字符串?
- 安装pyshp库
- Calculation (enter the calculation formula to get the result)
- 几行代码教你爬取LOL皮肤图片
- Animation - Introduction to keyframes
猜你喜欢
Type conversion in C #
St table template
安装pyshp库
Storing inherited knowledge in cloud computing
基于pygame库编写的五子棋游戏
[leetcode 202] happy number
[leetcode 54] spiral matrix
Robocode教程8——AdvancedRobot
1007 go running (hdu6808) in the fourth game of 2020 Hangzhou Electric Multi school competition
Motor and drive (Qi Jinqing Edition)
随机推荐
[leetcode 459] duplicate substring
Rust:在线程池中共享变量
Customized communication between threads (reentrantlock)
词频统计
检测技术与原理
Generate excel template (drop-down selection, multi-level linkage)
几行代码教你爬取LOL皮肤图片
Record the installation and configuration of gestermer on TX2, and then use GST RTSP server
Arcpy为矢量数据添加字段与循环赋值
Object转Json差异之Gson fastJson jackson 修改字段名
Kalman filter and inertial integrated navigation
解决ArcGIS分区统计显示太多唯一值执行失败
Rust:如何实现一个线程池?
selenium+PhantomJS破解滑动验证2
5.The Simple Problem
Qthread simple test understanding
进程间通信的方式
scikit-learn sklearn 0.18 官方文档中文版
Type conversion in C #
Import of data