MCPcopy Create free account
hub / github.com/Boris-code/feapder / make_batch_sql

Function make_batch_sql

feapder/utils/tools.py:2181–2246  ·  view source on GitHub ↗

@summary: 生产批量的sql --------- @param table: @param datas: 表数据 [{...}] @param auto_update: 使用的是replace into, 为完全覆盖已存在的数据 @param update_columns: 需要更新的列 默认全部,当指定值时,auto_update设置无效,当duplicate key冲突时更新指定的列 @param update_columns_value: 需要更新的列的值 默认为datas里边对应的值, 注意 如果值为字符串类型 需要主动

(
    table, datas, auto_update=False, update_columns=(), update_columns_value=()
)

Source from the content-addressed store, hash-verified

2179
2180
2181def make_batch_sql(
2182 table, datas, auto_update=False, update_columns=(), update_columns_value=()
2183):
2184 """
2185 @summary: 生产批量的sql
2186 ---------
2187 @param table:
2188 @param datas: 表数据 [{...}]
2189 @param auto_update: 使用的是replace into, 为完全覆盖已存在的数据
2190 @param update_columns: 需要更新的列 默认全部,当指定值时,auto_update设置无效,当duplicate key冲突时更新指定的列
2191 @param update_columns_value: 需要更新的列的值 默认为datas里边对应的值, 注意 如果值为字符串类型 需要主动加单引号, 如 update_columns_value=("'test'",)
2192 ---------
2193 @result:
2194 """
2195 if not datas:
2196 return
2197
2198 keys = list(set([key for data in datas for key in data]))
2199 values_placeholder = ["%s"] * len(keys)
2200
2201 values = []
2202 for data in datas:
2203 value = []
2204 for key in keys:
2205 current_data = data.get(key)
2206 current_data = format_sql_value(current_data)
2207
2208 value.append(current_data)
2209
2210 values.append(value)
2211
2212 keys = ["`{}`".format(key) for key in keys]
2213 keys = list2str(keys).replace("'", "")
2214
2215 values_placeholder = list2str(values_placeholder).replace("'", "")
2216
2217 if update_columns:
2218 if not isinstance(update_columns, (tuple, list)):
2219 update_columns = [update_columns]
2220 if update_columns_value:
2221 update_columns_ = ", ".join(
2222 [
2223 "`{key}`={value}".format(key=key, value=value)
2224 for key, value in zip(update_columns, update_columns_value)
2225 ]
2226 )
2227 else:
2228 update_columns_ = ", ".join(
2229 ["`{key}`=values(`{key}`)".format(key=key) for key in update_columns]
2230 )
2231 sql = "insert into `{table}` {keys} values {values_placeholder} on duplicate key update {update_columns}".format(
2232 table=table,
2233 keys=keys,
2234 values_placeholder=values_placeholder,
2235 update_columns=update_columns_,
2236 )
2237 elif auto_update:
2238 sql = "replace into `{table}` {keys} values {values_placeholder}".format(

Callers 1

add_batch_smartMethod · 0.90

Calls 5

format_sql_valueFunction · 0.85
list2strFunction · 0.85
zipFunction · 0.85
getMethod · 0.45
joinMethod · 0.45

Tested by

no test coverage detected