python mysql 良好的数据保存函数
先前插入mysql数据库一直是按照字段和对应的值拼接字符串,看到这个方法,感觉写的很好。
make_insert_sql 函数的封装的优点:
- data 字典格式
- 将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)
网友评论