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
Connector/Python MariaDB - подготовленные заявления, не выпущенные ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение