Идея:
Моя цель - найти изменения в CSV, используя количество обнаруженных строк, и сравнить новое значение со старым значением. Если есть изменение, отправьте все данные CSV в таблицу MySQL.
Проблема
Прежде всего, код отлично работает, когда файл CSV не тронут и заполнен данными.
Но у нас есть программное обеспечение, которое загружает тысячи данных в CSV (загрузка всех данных в CSV занимает около 1 минуты). Каждый раз, когда программа запускается, она удаляет текущие данные и снова загружает новые.
Пока программа загружает данные в файл CSV, Python затем обнаруживает изменение в CSV и выдает мне эту ошибку :
Traceback (most recent call last):
File "C:\Users\LV98\Desktop\Database Test\Database.py", line 83, in <module>
start()
File "C:\Users\LV98\Desktop\Database Test\Database.py", line 72, in start
mySQLcursor2.execute('insert into fms (customer_code,customer_logo, product_code,product_description,allergen_info, barcode_inner, barcode_outer, ingredients, EnergyKJ, EnergyKCAL, Fat, Saturates, Carbohydrates, Sugars, Fibre, Protein, salt) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);', row)
File "C:\Users\LV98\AppData\Roaming\Python\Python38\site-packages\mysql\connector\cursor.py", line 558, in execute
stmt = RE_PY_PARAM.sub(psub, stmt)
File "C:\Users\LB98\AppData\Roaming\Python\Python38\site-packages\mysql\connector\cursor.py", line 85, in __call__
raise errors.ProgrammingError(
mysql.connector.errors.ProgrammingError: Not enough parameters for the SQL statement
Но если я запускаю сценарий .py
после того, как данные CSV все еще загружены - он работает нормально.
Обычно этот скрипт не работает при загрузке данных CSV.
Код:
def countRows():
prev_rowcount_CSV = None
while True:
###CSV
file = open('C:/Users/LV98/Desktop/Database Test/FMSExport.csv')
reader = csv.reader(file)
lines = len(list(reader))
if lines != prev_rowcount_CSV and prev_rowcount_CSV != None:
print("CSV Change")
#Truncate FMS table in MySQL database
truncateFMS()
mySQLcursor1 = mysqlConnection.cursor()
with open('G:/Technical/Labels/Production/Data/FMSExport.csv', 'r') as f:
data = csv.reader(f)
next(data, None)
for row in data:
mySQLcursor1.execute('insert into fms (customer_code,customer_logo, product_code,product_description,allergen_info, barcode_inner, barcode_outer, ingredients, EnergyKJ, EnergyKCAL, Fat, Saturates, Carbohydrates, Sugars, Fibre, Protein, salt) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);', row)
mysqlConnection.commit()
mySQLcursor1.close()
prev_rowcount_CSV = lines
#Repeat this function every X seconds
time.sleep(10 - ((time.time() - starttime) % 10))
countRows()
Вопрос:
Я бы хотел, чтобы этот код работал, даже когда данные CSV все еще загружаются с данными. Как заставить работать?