根据条件删除
Removing on the basis of condition
我试图创建一个查询循环,它执行从一个实例到下一个实例的交互步骤。获取正确的数据后
我已经连接上数据库了
我可以 运行 但我想根据数据类型应用案例,如果 COL_NAMES 数据类型是 varchar 那么 '' 如果 COL_NAME 数据类型是 float或 int 然后将其替换为 0,对于日期时间数据类型,将其替换为 1880-10-10
现在我只能在数据类型为空白时应用:
a = ','.join(f"[{y}]=isnull([{y}], '')" for y in COL_NAMES)
a
我的查询就像
z = f"[UPDATE ABC_A SET {a}]
您已经循环遍历 SELECT 的结果,因此无需将 DATA_TYPE 存储在单独的 list
中,您可以只存储 COLUMN_NAME 及其dict
中对应的默认值。然后您可以将 [column_name]=isnull([column_name, ...
片段粘合在一起并将它们插入到您的 UPDATE 语句中:
sql = """\
SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'ABC_A'"""
column_defaults = {}
for row in crsr.execute(sql):
if row.DATA_TYPE in ['varchar', 'nvarchar']:
default_value = "''"
elif row.DATA_TYPE in ['int', 'float']:
default_value = "0"
elif row.DATA_TYPE in ['date', 'datetime2']:
default_value = "'1880-10-10'"
else:
raise ValueError(f"Unhandled column type: {row.DATA_TYPE}")
column_defaults[row.COLUMN_NAME] = default_value
s = ', '.join([f"[{col}]=isnull([{col}], {column_defaults[col]})" for col in column_defaults])
print(s)
# [Date]=isnull([Date], '1880-10-10'), [NAME]=isnull([NAME], ''), [FileNo]=isnull([FileNo], 0)
sql = f"UPDATE ABC_A SET {s}"
print(sql)
# UPDATE ABC_A SET [Date]=isnull([Date], '1880-10-10'), [NAME]=isnull([NAME], ''), [FileNo]=isnull([FileNo], 0)
这只是一个示例,因此您可能需要向 if/elif/else
块添加更多列类型。
我试图创建一个查询循环,它执行从一个实例到下一个实例的交互步骤。获取正确的数据后
我已经连接上数据库了
我可以 运行 但我想根据数据类型应用案例,如果 COL_NAMES 数据类型是 varchar 那么 '' 如果 COL_NAME 数据类型是 float或 int 然后将其替换为 0,对于日期时间数据类型,将其替换为 1880-10-10 现在我只能在数据类型为空白时应用:
a = ','.join(f"[{y}]=isnull([{y}], '')" for y in COL_NAMES)
a
我的查询就像
z = f"[UPDATE ABC_A SET {a}]
您已经循环遍历 SELECT 的结果,因此无需将 DATA_TYPE 存储在单独的 list
中,您可以只存储 COLUMN_NAME 及其dict
中对应的默认值。然后您可以将 [column_name]=isnull([column_name, ...
片段粘合在一起并将它们插入到您的 UPDATE 语句中:
sql = """\
SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'ABC_A'"""
column_defaults = {}
for row in crsr.execute(sql):
if row.DATA_TYPE in ['varchar', 'nvarchar']:
default_value = "''"
elif row.DATA_TYPE in ['int', 'float']:
default_value = "0"
elif row.DATA_TYPE in ['date', 'datetime2']:
default_value = "'1880-10-10'"
else:
raise ValueError(f"Unhandled column type: {row.DATA_TYPE}")
column_defaults[row.COLUMN_NAME] = default_value
s = ', '.join([f"[{col}]=isnull([{col}], {column_defaults[col]})" for col in column_defaults])
print(s)
# [Date]=isnull([Date], '1880-10-10'), [NAME]=isnull([NAME], ''), [FileNo]=isnull([FileNo], 0)
sql = f"UPDATE ABC_A SET {s}"
print(sql)
# UPDATE ABC_A SET [Date]=isnull([Date], '1880-10-10'), [NAME]=isnull([NAME], ''), [FileNo]=isnull([FileNo], 0)
这只是一个示例,因此您可能需要向 if/elif/else
块添加更多列类型。