I want to write an sql query to a csv file. The query looks something like this:
“insert into … (…) values”
(…, ‘…’, ‘…’),
(…, ‘…’, ‘…’);
I was able to get the column names, but for some reason not all the values fall into the “rows” sheet, only the first three rows, although there are >1000 of them in the source file
<code>import re
import csv
def sql_insert_to_csv(sql_content, output_csv_path):
insert_statements = re.findall(r'INSERT INTO `w+` ((.*?)) VALUESs*(.*?);', sql_content, re.DOTALL)
if not insert_statements:
print("Not found INSERT in file")
return
for columns, values in insert_statements:
columns_list = [col.strip('` ') for col in columns.split(',')]
values_list = re.findall(r'((.*?))', values, re.DOTALL)
rows = []
for value in values_list:
split_values = [val.strip().strip("'") for val in value.split(',')]
rows.append(split_values)
# Запись в CSV
with open(output_csv_path, 'w', newline='', encoding='utf-8') as csvfile:
csvwriter = csv.writer(csvfile)
csvwriter.writerow(columns_list)
csvwriter.writerows(rows)
print(f"data has been uploaded successfully: {output_csv_path}")
sql_file_path = r'input.sql'
output_csv_path = r'output.csv'
try:
with open(sql_file_path, 'r', encoding='utf-8') as file:
sql_content = file.read()
except FileNotFoundError:
print(f"file not found: {sql_file_path}")
exit(1)
except Exception as e:
print(f"Error with reading: {e}")
exit(1)
sql_insert_to_csv(sql_content, output_csv_path)
</code>
<code>import re
import csv
def sql_insert_to_csv(sql_content, output_csv_path):
insert_statements = re.findall(r'INSERT INTO `w+` ((.*?)) VALUESs*(.*?);', sql_content, re.DOTALL)
if not insert_statements:
print("Not found INSERT in file")
return
for columns, values in insert_statements:
columns_list = [col.strip('` ') for col in columns.split(',')]
values_list = re.findall(r'((.*?))', values, re.DOTALL)
rows = []
for value in values_list:
split_values = [val.strip().strip("'") for val in value.split(',')]
rows.append(split_values)
# Запись в CSV
with open(output_csv_path, 'w', newline='', encoding='utf-8') as csvfile:
csvwriter = csv.writer(csvfile)
csvwriter.writerow(columns_list)
csvwriter.writerows(rows)
print(f"data has been uploaded successfully: {output_csv_path}")
sql_file_path = r'input.sql'
output_csv_path = r'output.csv'
try:
with open(sql_file_path, 'r', encoding='utf-8') as file:
sql_content = file.read()
except FileNotFoundError:
print(f"file not found: {sql_file_path}")
exit(1)
except Exception as e:
print(f"Error with reading: {e}")
exit(1)
sql_insert_to_csv(sql_content, output_csv_path)
</code>
import re
import csv
def sql_insert_to_csv(sql_content, output_csv_path):
insert_statements = re.findall(r'INSERT INTO `w+` ((.*?)) VALUESs*(.*?);', sql_content, re.DOTALL)
if not insert_statements:
print("Not found INSERT in file")
return
for columns, values in insert_statements:
columns_list = [col.strip('` ') for col in columns.split(',')]
values_list = re.findall(r'((.*?))', values, re.DOTALL)
rows = []
for value in values_list:
split_values = [val.strip().strip("'") for val in value.split(',')]
rows.append(split_values)
# Запись в CSV
with open(output_csv_path, 'w', newline='', encoding='utf-8') as csvfile:
csvwriter = csv.writer(csvfile)
csvwriter.writerow(columns_list)
csvwriter.writerows(rows)
print(f"data has been uploaded successfully: {output_csv_path}")
sql_file_path = r'input.sql'
output_csv_path = r'output.csv'
try:
with open(sql_file_path, 'r', encoding='utf-8') as file:
sql_content = file.read()
except FileNotFoundError:
print(f"file not found: {sql_file_path}")
exit(1)
except Exception as e:
print(f"Error with reading: {e}")
exit(1)
sql_insert_to_csv(sql_content, output_csv_path)
Programming guru, tell me what my problem is…
New contributor
Nikemerrer is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.