Python一些可能用的到的函数系列8 使用Jinja生成sqlalchemy数据对象

说明

人写代码总有bug

传统的写代码方式是hardcode。即由人按照程序语言进行编写,然后语言的组件进行编译/解释,交给机器执行。任何一种语言,也包括python,没有办法完美表达人的意思(这意味着表达方式可能不人性化);另外就是机器不接受错别字。
所以手工编写代码错误的概率很好,即便经过多次调试仍然不能保证无错。这就是code by man。

code by code by man 其实指的是人通过工具间接的编程。

除去一些产品之外(例如拖拽编程之类的,那也不是最优方式),其实比较常见的方式是通过配置编程。
总体上我觉得比较清晰的有两种:

1 通过配置
2 通过程序生成代码

配置的方式这里不谈,有兴趣可以看我的另一篇文章
我认为通过jinja生成py文件算是通过程序生成代码。(如果和subprocess配合起来,是可以在运行中产生代码再执行的)

1 j2文件

datamodel.j2

class {{classname}}(db.Model):
    __tablename__='{{classname|lower}}'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))
    {%for str_var in str_var_list%}{{str_var}}= db.Column(db.String(32))
    {%endfor%}
    {%for num_var in num_var_list%}{{num_var}}= db.Column(db.Float(precision=2))
    {%endfor%}
    {%for dt_var in dt_var_list%}{{dt_var}}= db.Column(db.DateTime())
    {%endfor%}    

2 python程序

test1.py

import DataManipulation as dm 

# 不传空列表模板知识不处理,不会出错
str_var_list = ['a', 'b', 'c']
num_var_list = ['d1','d2','d3']
dt_var_list =['dt1','dt2']
content = dm.gen_by_j2(template_name='datamodel.j2', classname='Base8v2', str_var_list=str_var_list, num_var_list=num_var_list, dt_var_list=dt_var_list)

with open('tem.py', 'w') as f:
    f.write(content)

3 生成的结果

tem.py

class Base8v2(db.Model):
    __tablename__='base8v2'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))
    a= db.Column(db.String(32))
    b= db.Column(db.String(32))
    c= db.Column(db.String(32))
    
    d1= db.Column(db.Float(precision=2))
    d2= db.Column(db.Float(precision=2))
    d3= db.Column(db.Float(precision=2))
    
    dt1= db.Column(db.DateTime())
    dt2= db.Column(db.DateTime())

4 总结

通过jinja循环,只要在python程序里将变量进行分类,然后把变量列表送入j2文件里就可以生成了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值