Connector/Python MariaDB - подготовленные заявления, не выпущенныеPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Connector/Python MariaDB - подготовленные заявления, не выпущенные

Сообщение Anonymous »

OS: Ubuntu 20.04.6 LTS < /p>
Библиотека Python Mariadb версии: 1.1.10 и 1.1.12 (текущий) < /p>
версии сервера MariaDB. : 10.3 и 11.7.1-rc < /p>
Следующий сценарий выдвигает ошибку Mariadb.operationalError: не может создать больше, чем MAX_PREPARED_STMT_COUNT (текущее значение: 16382) , которое возникает, когда количество сохраненных подготовленных операторов в базе данных бэкэнд превышает определенное предел. Если я сохранил объекты курсора списка, по одному на вызов и явно не закрыл курсоры. < /p>
Однако, поскольку я Я использую a с блоком для управления объектом курсора, он должен закрываться (и, действительно, ошибка сохраняется, даже если я явность добавляю cursor.close () в цикл).

Эта ошибка не возникает при использовании разъема mypysql с аналогичной логикой. < /p>
Ошибка также не возникает, когда я обменяю текстовое поле Новый MariaDB 11.7.1-RC Vector Fector: < /p>
def main():
conn = mariadb.connect(**test_connection_params)

with conn.cursor() as cursor:
query = """
CREATE TABLE IF NOT EXISTS products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(128),
description VARCHAR(2000),
embedding VECTOR(4) NOT NULL
);
"""
cursor.execute(query)
conn.commit()

conn = mariadb.connect(**test_connection_params)

data = [(f"Product {i}", f"Description for product {i}", json.dumps([i*0.01, i*0.02, i*0.03, i*0.04])) for i in range(1_000_000)]
query = "INSERT INTO products (name, description, embedding) VALUES (?, ?, VEC_FromText(?))"

chunk_size = 10
for i in range(0, len(data), chunk_size):
with conn.cursor() as cursor:
cursor.executemany(query, data[i:i + chunk_size])
conn.commit()

conn.close()
< /code>
Как ни странно, ошибка возвращается с использованием той же логики, которая просто работала, когда я обертываю часть кода MariaDB в объект Python: < /p>
class DatabaseManager:
def __init__(self, config):
self.connection = mariadb.connect(**config)

def create_table_if_not_exists(self):
query = """
CREATE TABLE IF NOT EXISTS products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(128),
description VARCHAR(2000),
embedding VECTOR(4) NOT NULL
);
"""
with self.connection.cursor() as cursor:
cursor.execute(query)
self.connection.commit()

def insert_rows(self, chunk):
query = """
INSERT INTO products (name, description, embedding)
VALUES (?, ?, VEC_FromText(?))
"""
with self.connection.cursor() as cursor:
cursor.executemany(query, chunk)

def close_connection(self):
if self.connection:
self.connection.close()

def main():
db_manager = DatabaseManager(test_connection_params)
db_manager.create_table_if_not_exists()

data = [(f"Product {i}", f"Description for product {i}", json.dumps([i * 0.01, i * 0.02, i * 0.03, i * 0.04])) for i
in range(1_000_000)]

chunk_size = 10
for i in range(0, len(data), chunk_size):
db_manager.insert_rows(data[i:i + chunk_size])

db_manager.close_connection()


Подробнее здесь: https://stackoverflow.com/questions/794 ... -releasing
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»