当前位置: 首页 > news >正文

郑州怎么做外贸公司网站网站后台怎么挂广告 怎么做

郑州怎么做外贸公司网站,网站后台怎么挂广告 怎么做,心馨人生网站建设设计,网站建设听取需求1.需求及场景概述 现有系统中因历史数据量过大#xff0c;产生了将历史数据进行按月存储的要求#xff0c;系统和数据库交互使用的是sqlalchemy#xff0c;假设系统的原来的历史记录表#xff08;record#xff09;如下#xff1a; 为了将历史数据按月分表存储#xff0…1.需求及场景概述 现有系统中因历史数据量过大产生了将历史数据进行按月存储的要求系统和数据库交互使用的是sqlalchemy假设系统的原来的历史记录表record如下 为了将历史数据按月分表存储我们需要以此表为基础按月创建对应的月表来进行分表存储同时又要使用orm的功能。面对这样的需求我们很自然的会想到创建如下模型 class Recode_202405(Base): __tablename__ record_202405 id Column(INT(11), primary_keyTrue) name Column(String(100, utf8mb4_unicode_ci)) 这样当然可以但是我们不可能每月手动去创建这个模型然后重启自己的服务这明显有问题 那如何解决呢下面就介绍一种在这种场景下基于sqlalchemy实现的分表存储方案。 首先我们对我们应用场景及需求进行一下描述 1.我们有一张基础表这个表作为我们创建月表的模板。 2.当有新数据需要入库时我们将数据按月存储到当前月份的月表中如果当月表不存在系统自动创建。 3.支持使用OMR方便数据存储及查询。 2.实现方案 既然要支持使用ORM 我们势必要获取月表的model。sqlalchemy0.9.1版本推出了Automap它可以自动映射数据库的表通过数据表名映射model。大概的用法如下 from sqlalchemy.ext.automap import automap_baseAutoBase automap_base()# reflect the tables AutoBase.prepare(engine, reflectTrue) tablename record_202405 RecordDao getattr(AutoBase.classes, tablename) 既然可以通过表名映射回model,那么现在的问题就是如何基于已有的基础表创建当月的月表可以参考如下代码 from sqlalchemy.ext.automap import automap_base AutoBase automap_base()table_name record date 202405 # 基于基础表创建指定月份的月表 base_table autobase.metadata.tables[table_name] mdata MetaData() new_table base_table.tometadata(metadatamdata, namef{table_name}_{date}) try:# 创建表new_table.create(bindengine) except BaseException as e:print(e) 基于上述方案我们可以封装一个方法该方法接收两个参数一个是表名一个是分表的月份其实可以进行任何程度的分表返回该表的model,通过sqlalchemy 的ORM 进行增删改查操作整体代码如下 from sqlalchemy import create_engine, MetaData from sqlalchemy.orm import sessionmaker, Session from sqlalchemy.ext.automap import automap_base from urllib import parse from contextlib import contextmanager import timemysql_user root mysql_password root mysql_host 127.0.0.1 mysql_port 3306 mysql_db dbSQLALCHEMY_DATABASE_URL fmysqlpymysql://{mysql_user}:{parse.quote_plus(mysql_password)}{mysql_host}:{mysql_port}/{mysql_db}?charsetutf8engine create_engine(SQLALCHEMY_DATABASE_URL, pool_recycle7200) SessionLocal sessionmaker(autocommitFalse, autoflushFalse, bindengine)contextmanager def session_maker():try:db: Session SessionLocal()yield dbdb.commit()except Exception as e:print(e)db.rollback()finally:db.close()def get_table_model(table_name, dateNone):autobase automap_base()autobase.prepare(engine, reflectTrue)print(autobase)base_model Nonetry:base_model getattr(autobase.classes, table_name)except Exception as e:print(e)return base_modelif date None: # 不分表的情况return base_modelelse: # 分表的情况# 获取基础类base_table autobase.metadata.tables[table_name]mdata MetaData()new_table base_table.tometadata(metadatamdata, namef{table_name}_{date})# new_table base_model.tometadata(metadatamdata, namef{table_name}_{date})try:# 创建表new_table.create(bindengine)except BaseException as e:# 忽略建表异常存在多进程同时建表情况忽略后刷新autobase再试print(e)Automap的映射虽然是自动的但是只有在启动的时候生效也就是说如果新建一个数据表而没有告诉Automap那这个表是找不到的。在实际使用中可以捕获AttributeError异常并再次调用AutoBase.prepare(engine, reflectTrue) 刷新映射关系。autobase automap_base()autobase.prepare(engine, reflectTrue)base_model getattr(autobase.classes, f{table_name}_{date})return base_modeldef get_table_model(table_name, dateNone):autobase automap_base()autobase.prepare(engine, reflectTrue)print(autobase)base_model Nonetry:base_model getattr(autobase.classes, table_name)except Exception as e:print(e)return base_modelif date None: # 不分表的情况return base_modelelse: # 分表的情况# 获取基础类base_table autobase.metadata.tables[table_name]mdata MetaData()new_table base_table.tometadata(metadatamdata, namef{table_name}_{date})# new_table base_model.tometadata(metadatamdata, namef{table_name}_{date})try:# 创建表new_table.create(bindengine)except BaseException as e:# 忽略建表异常存在多进程同时建表情况忽略后刷新autobase再试print(e)Automap的映射虽然是自动的但是只有在启动的时候生效也就是说如果新建一个数据表而没有告诉Automap那这个表是找不到的。在实际使用中可以捕获AttributeError异常并再次调用AutoBase.prepare(engine, reflectTrue) 刷新映射关系。autobase automap_base()autobase.prepare(engine, reflectTrue)base_model getattr(autobase.classes, f{table_name}_{date})return base_model# 使用 Record database.get_table_model(record, 202406)ll Record(name1111)with database.session_maker() as db:db.add(ll)db.commit()ll db.query(Record).all()print(ll) 参考sqlalchemy分表操作 - 知乎
http://www.tj-hxxt.cn/news/222367.html

相关文章:

  • 响水网站建设公司平安建设 十户长网站地址
  • 未成年人做网站网站开发php工程师
  • 中国优秀的企业网站成crm软件
  • 电脑网站 手机网站 微信网站网站建设企业宣传
  • 正规网站优化哪个公司好刘娇娇做网站骗钱的
  • 东莞市住房和城乡建设局网站淄博网站制作品牌定制
  • 做网站盘锦安徽今天刚刚发生的新闻
  • 福建建设管理中心网站桂林生活网租房
  • 东鹏拼奖网站怎么做绵阳网站建设 经开区
  • 永康营销型网站建设青海城乡和住房建设厅网站
  • 最近比较火的关键词南京优化网站建设
  • 定制产品网站德阳小程序开发
  • 网站开发方式有外包全国最新工商企业名录
  • 中山建设安监站网站wordpress 主题 餐饮
  • 做远程培训网站用什么系统wordpress前台页面显示文章图片
  • 网站开发时间段网站做跳转会有什么影响
  • 高培淇自己做的网站以图搜图百度识图
  • 开发公众号 微网站开发做静态网站成本
  • 用dw做网站流程网站发布教程视频教程
  • 有没有什么网站免费做名片家里电脑做网站
  • 创建网站的目的做网站必须要有服务器吗
  • 宁波网站开发建设公司wordpress怎么安装双语言
  • 烟台网站建设策划西安哪家公司做的网站好
  • h5视频网站模板暴雪国服官网入口
  • 网站建设代理商电话如何建立公司网站?
  • 教育 高校 网站模板太原手机网站制作
  • wordpress 素材站模板常德seo技术
  • 网站推广软件品牌推广营销策划公司
  • 青岛有做网站的吗自己做网站教程
  • 福田专业网站建设公司哪家好静态网站更新