美文网首页
python mysql 良好的数据保存函数

python mysql 良好的数据保存函数

作者: 王国的荣耀 | 来源:发表于2020-12-22 15:46 被阅读0次

    python mysql 良好的数据保存函数

    先前插入mysql数据库一直是按照字段和对应的值拼接字符串,看到这个方法,感觉写的很好。

    make_insert_sql 函数的封装的优点:

    1. data 字典格式
    2. 将keys和values做了良好的切割,不会让sql动态的增长;而是获取当前字典的key和value进行的字符串格式化。
    def list2str(datas):
        '''
        列表转字符串
        :param datas: [1, 2]
        :return: (1, 2)
        '''
        data_str = str(tuple(datas))
        data_str = re.sub(",\)$", ')', data_str)
        return data_str
    
    def make_insert_sql(table, data, auto_update=False, update_columns=(), insert_ignore=False):
        '''
        @summary: 适用于mysql, oracle数据库时间需要to_date 处理(TODO)
        ---------
        @param table:
        @param data: 表数据 json格式
        @param auto_update: 使用的是replace into, 为完全覆盖已存在的数据
        @param update_columns: 需要更新的列 默认全部,当指定值时,auto_update设置无效,当duplicate key冲突时更新指定的列
        @param insert_ignore: 数据存在忽略
        ---------
        @result:
        '''
    
        keys = ['`{}`'.format(key) for key in data.keys()]
        keys = list2str(keys).replace("'", '')
    
        values = [format_sql_value(value) for value in data.values()]
        values = list2str(values)
    
        if update_columns:
            if not isinstance(update_columns, (tuple, list)):
                update_columns = [update_columns]
            update_columns_ = ', '.join(["{key}=values({key})".format(key=key) for key in update_columns])
            sql = 'insert%s into {table} {keys} values {values} on duplicate key update %s' % (' ignore' if insert_ignore else '', update_columns_)
    
        elif auto_update:
            sql = 'replace into {table} {keys} values {values}'
        else:
            sql = 'insert%s into {table} {keys} values {values}' % (' ignore' if insert_ignore else '')
    
        sql = sql.format(table=table, keys=keys, values=values).replace('None', 'null')
        return sql
    
    if __name__ == '__main__':
        account_data = {
            "__biz": 'MjM5MjAxNDM4MA==',
            "account": '人民日报',
            "head_url": 'http://wx.qlogo.cn/mmhead/Q3auHgzwzM5Dlw4H8vWoicXPXccEVkWYgFfn45zFUq38nuViaPF89Pkg/0',
            "summary": '参与、沟通、记录时代',
            "spider_time": datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
        }
        print(account_data)
    
        keys = ['`{}`'.format(key) for key in account_data.keys()]
        keys = list2str(keys).replace("'", '')
        print(keys)
    
        values = ['`{}`'.format(value) for value in account_data.values()]
        values = list2str(values).replace("'", '')
        print(values)
        table = 'wechat_account'
        sql = 'insert %s into {table} {keys} values {values}' % (' ignore')
        run = sql.format(table=table, keys=keys, values=values)
        print(run)
    

    相关文章

      网友评论

          本文标题:python mysql 良好的数据保存函数

          本文链接:https://www.haomeiwen.com/subject/cknxnktx.html