Как эффективно обновить blob с помощью sqlalchemy - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь обновить некоторые файлы XML, сохраненные в виде BLOB-объектов в базе данных. Я могу получить их и обновить сам файл, но при попытке выполнить запрос на обновление я получаю сообщение об ошибке тайм-аута. размер таблицы составляет около 280 ГБ с 2546573 строками, и мне нужно обновить около 1500 из них, так есть ли эффективный способ сделать это? Это код, в котором я тестирую применение обновления только к одному файлу, и вот ошибка, которую я получаю сейчас при выполнении кода. Спасибо

InternalError: (pymysql.err.InternalError) (1205, «Превышено время ожидания блокировки; попробуйте перезапустить транзакцию»)

#file id
id=1851340
# retrieve the file from database
data_stmt="SELECT data FROM t_content WHERE iscurrent=1 AND ID='"+str(id)+"'"
temp_data= pd.read_sql_query(data_stmt,engine)
#update some info in the xml file
tree=add_lang(temp_data,str(id))
#convert Elemtree to string
xml_string=ET.tostring(tree.getroot()).decode()
#encode to binary
bin_data = xml_string.encode("utf-8")

#load metadata
metadata = MetaData()
t_content = Table('t_content', metadata, autoload=True, autoload_with=engine)
conn = engine.connect()
#update the file in the database
stmt = t_content.update().where(t_content.c.iscurrent==1 and t_content.c.ID ==id).values(data=(bin_data))
conn.execute(stmt)
print("Done")
...