当前位置:网站首页>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
边栏推荐
猜你喜欢
Robocode教程8——AdvancedRobot
Completely clean up MySQL win
安装pyshp库
-- SQL query and return limit rows
Gesture recognition research
Storing inherited knowledge in cloud computing
How SYSTEMd uses / etc / init D script
[untitled] database - limit the number of returned rows
Substring Inversion (Easy Version)
C language file operation
随机推荐
Doomsday (simple computational geometry)
Mysql database foundation
[leetcode 401] binary Watch
用C语言实现重写strcmp等四个函数
Stability building best practices
[leetcode 67] sum of two binary numbers
多线程爬取马可波罗网供应商数据
檢測技術與原理
队列解决约瑟夫问题
Detection technology and principle
1007 go running (hdu6808) in the fourth game of 2020 Hangzhou Electric Multi school competition
Customized communication between threads (reentrantlock)
Plane semi intersecting plate
小区房价可视化
[transfer] MySQL: how many rows of data can InnoDB store in a B + tree?
7-21日错题涉及知识点。
Explanation of the second I interval of 2020 Niuke summer multi school training camp
Rust 的多线程安全引用 Arc
[leetcode 19] delete the penultimate node of the linked list
MySQL groups are sorted by a field, and the first value is taken