У меня есть карта, на которой нарисованы лоты, когда человек выбирает один или несколько лотов, я хочу получить информацию об этих лотах из базы данных и вернуть ее. Лоты идентифицируются по идентификаторам, подобным тем, которые указаны в "lots_list". В настоящее время я использую для l oop для итерации по списку и извлечения данных, передавая идентификатор предложению where с заполнителем, но при этом выполнение выполняется довольно медленно.
def getLotInfo(lots_list):
lots = []
for lot in lots_list:
try:
connection = psycopg2.connect(user=user,
password=password,
host=host,
port=port,
database=database)
cursor = connection.cursor()
Psql_Query = '''SELECT setor, quadra, lote, area_ocupada FROM iptu_sql_completo WHERE sql
LIKE %s'''
cursor.execute(Psql_Query, (lot,))
lots.append(cursor.fetchone())
print(lots)
except (Exception, psycopg2.Error) as error:
print("Error fetching data from PostgreSQL table", error)
finally:
# closing database connection.
if (connection):
cursor.close()
connection.close()
print("PostgreSQL connection is closed")
return lots
lots_list = ["0830480002", "0830480003", "0830480004"]
Lots = getLotInfo(lots_list)
Я пытался использовать команду psycopg2 execute_batch
Psql_Query = '''SELECT setor, quadra, lote, area_ocupada FROM
iptu_sql_completo WHERE sql LIKE %s'''
ppgextra.execute_batch(cursor, Psql_Query, SQLs)
lots.append(cursor.fetchall())
print(lots)
, но я получаю следующую ошибку "не все аргументы преобразованы во время форматирования строки". Мне кажется, это потому, что я должен использовать заполнитель в запросе для каждого элемента в список, но если список когда-либо меняется в размере, будет ли способ исправить это? Идентификаторы не всегда последовательны.
Мой вопрос: есть ли способ добиться лучшей производительности, чем использование для l oop?