【发布时间】:2023-01-22 15:57:45
【问题描述】:
我正在编写一个 python 代码,它将读取目录中的多个文件并检查这些文件中的所有查询。该代码将执行两项检查:
- 它将检查 CREATE TABLE 查询中的表名是否包含在双引号中,如果是则发出警告,并且
- 它将检查 CREATE 语句中的任何列名是否为预定义名称,例如 CURRENT_DATE、CURRENT_ROLE、CURRENT_TIME、CURRENT_TIMESTAMP 和 CURRENT_USER,如果是则给出错误。
然而,当前代码似乎只适用于一个查询,即使在输入文档中提供了多个查询。任何人都可以帮我修改代码,以便它可以处理输入文档中由“;”分隔的多个查询
import os import xlsxwriter import sqlparse def get_value(): file_directory = input("Enter file directory: ") output_directory = file_directory wb = xlsxwriter.Workbook(output_directory + '\Summary of code.xlsx') summary_sheet = wb.add_worksheet('Summary') row = 1 column = 0 index = 0 predefined_column_names = ["CURRENT_DATE", "CURRENT_ROLE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "CURRENT_USER"] for filename in os.listdir(file_directory): filepath = os.path.join(file_directory, filename) with open(filepath, 'r') as f: sf_file = f.read() parsed_sql = sqlparse.split(sf_file) for i, statement in enumerate(parsed_sql): if statement.strip().upper().startswith("CREATE TABLE"): if "\"" in statement: table_name = statement.split()[2] if table_name.startswith("\"") and table_name.endswith("\""): print(f"{filename} sqlcode{i+1} Warning: Table Name should not be enclosed in double quotes") summary_sheet.write(row, column, filename) summary_sheet.write(row, column+1, f'sqlcode{i+1}') summary_sheet.write(row, column+2, statement) summary_sheet.write(row, column+3, "Warning: Table Name should not be enclosed in double quotes") row += 1 for col_name in predefined_column_names: if col_name in statement.upper(): print(f"{filename} sqlcode{i+1} Error: Column name '{col_name}' cannot be a predefined name") summary_sheet.write(row, column, filename) summary_sheet.write(row, column+1, f'sqlcode{i+1}') summary_sheet.write(row, column+2, statement) summary_sheet.write(row, column+3, f"Error: Column name '{col_name}' cannot be a predefined name") row += 1 wb.close() print("Check Completed") get_value()我正在编写一个 python 代码,它将读取目录中的多个文件并检查这些文件中的所有查询。该代码将执行两项检查:
- 它将检查 CREATE TABLE 查询中的表名是否包含在双引号中,如果是则发出警告,并且
- 它将检查 CREATE 语句中的任何列名是否为预定义名称,例如 CURRENT_DATE、CURRENT_ROLE、CURRENT_TIME、CURRENT_TIMESTAMP 和 CURRENT_USER,如果是则给出错误。
然而,当前代码似乎只适用于一个查询,即使在输入文档中提供了多个查询。任何人都可以帮我修改代码,以便它可以处理输入文档中由“;”分隔的多个查询吗?
【问题讨论】:
标签: python sql python-3.x loops sql-parser