python insert动态sql

python insert动态sql

同事已经封装好的持久化工具,无法正却处理value为None时的插入,所以只能自己拼接出原生sql,记录如下
value正常拼接后,后续可根据需求,动态传入table_name,columns等字段

# -*- coding:utf-8 -*-

base_sql = """INSERT INTO table_name
( ip, user_name, pass_word, organize_name, organize_code, update_time, is_enable)
VALUES {values};
"""

def sing(base_sql, params):
    params = tuple(['null' if param is None else param for param in params])

    format = ",".join(["'%s'"] * len(params))
    format = "({})".format(format % params)

    base_sql = base_sql.format(values=format)
    return base_sql

def multi(base_sql,datas):
    multiParams =[]
    for params in datas:
        params = tuple(['null' if param is None else param for param in params])
        format = ",".join(["'%s'"] * len(params))

        format = "({})".format(format % params)
        multiParams.append(format)
    return base_sql.format(values = ",".join(multiParams))

if __name__ == '__main__':
    import sys

    reload(sys)
    sys.setdefaultencoding('utf-8')
    params = [
        ['127.0.0.1', 'admin', 'ct@123', 'ct', None, 1595670950, True],
        ['127.0.0.1', 'admin', 'ct@123', u'中文', None, 1595670950, True]
    ]
    base_sql = multi(base_sql, params)
    print base_sql

    print sing(base_sql, ['127.0.0.1', 'admin', 'ct@123', 'ct', None, 1595670950, True])

处理结果

'127.0.0.1','admin','ct@123','ct','null','1595670950','True'
'127.0.0.1','admin','ct@123','中文','null','1595670950','True'
INSERT INTO table_name
( ip, user_name, pass_word, organize_name, organize_code, update_time, is_enable)
VALUES ('127.0.0.1','admin','ct@123','ct','null','1595670950','True'),('127.0.0.1','admin','ct@123','中文','null','1595670950','True');

INSERT INTO table_name
( ip, user_name, pass_word, organize_name, organize_code, update_time, is_enable)
VALUES ('127.0.0.1','admin','ct@123','ct','null','1595670950','True'),('127.0.0.1','admin','ct@123','中文','null','1595670950','True');

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值