Я пытаюсь получить данные с сервера mysql, выполнить код, используя полученные данные, а затем вернуть данные sh в базу данных в разных столбцах. Мне удалось заставить все это работать, как видно из моего кода.
Однако новые строки будут постоянно добавляться в базу данных, и я не хочу загружать всю базу данных каждый раз. Я хочу, чтобы код запускался только на добавленных новых строках. Поэтому я пытаюсь сохранить student_id и каким-то образом извлечь его и начало кода.
Я пробовал разные методы и даже пробовал мариновать, но мне не повезло. Цель состоит в том, чтобы код выполнялся непрерывно на удаленном сервере, поэтому я был бы очень признателен, если бы кто-то смог мне помочь, поскольку это поможет мне выполнить мою задачу.
Примечание. Это только фиктивные данные и код, но в основном метод того, чего я пытаюсь достичь.
import mysql.connector
import numpy as np
import time
import pickle
filename = 'saved_id'
infile = open(filename,'rb')
st_id = pickle.load(infile)
print(number)
conn = mysql.connector.connect(user="user", password='password',
host="demo.mysql.database.azure.com", port=3306)
conn.autocommit = True
cursor = conn.cursor()
cursor.execute("USE testdb;")
while True:
outfile = open(filename,'wb')
cursor.execute(f"SELECT * FROM student WHERE student_id >= {st_id};")
myresult = np.array(cursor.fetchall())
print (myresult)
for row in myresult:
mark_1 = np.random.randint(0,100)
mark_2 = np.random.randint(0,100)
mark_3 = np.random.randint(0,100)
iid = row[0]
pickle.dump(iid,outfile)
outfile.close()
cursor.execute(f"UPDATE student SET grade_1 = {mark_1}, grade_2 = {mark_2}, grade_3 = {mark_3} WHERE student_id = {iid};")
time.sleep(5)
Думаю, проблема в том, что когда я запускаю код изначально, значение pickle не имеет ввода, и когда я пытаюсь использовать стандартный метод переменных, он не будет определен, что также приведет к некоторой ошибке.
Пожалуйста, дайте мне знать, если есть какие-то аспекты моего кода, которые можно улучшить для скорости, эффективности!