Задать вопрос
@SavinSA

Подключение к YDB. Как создать простой запрос yql/sql?

Создал БД в Yandex Cloud и простенькую таблицу с двумя записями. Пишу небольшой скрипт на Python и застрял.
1. driver_config = ydb.DriverConfig(...)
2. with ydb.Driver(driver_config) as driver
3. pool = ydb.SessionPool(driver)
Как сделать следующий шаг?
result = session.transaction().execute('select * from cards;')
Если делаю
session = driver.table_client.session().create()
то выходит ошибка Driver was stopped.
Как связать pool и session? Ну или может ещё проще.
  • Вопрос задан
  • 189 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
nki
@nki
bezkart.ru готовая система лояльности
Пример не мой, взял у коллеги. Но у меня работает.

driver = ydb.Driver(
  endpoint="",
  database="",
  credentials=""),
)

# Wait for the driver to become active for requests.
driver.wait(fail_fast=True, timeout=5)

# Create the session pool instance to manage YDB sessions.
pool = ydb.SessionPool(driver)

def execute_query(session):
  # Create the transaction and execute query.
  return session.transaction().execute(
    'insert into dataTab (tel, SaleCount, TotalCount, stel) VALUES("9001002030", 4, 47, "8323");',
    commit_tx=True,
    settings=ydb.BaseRequestSettings().with_timeout(3).with_operation_timeout(2)
  )

result = pool.retry_operation_sync(execute_query)
Ответ написан
@SavinSA Автор вопроса
Проблема решена!
У меня было так:
def get_pool(endpoint, database):
....
pool = ydb.SessionPool(driver)
result = pool.retry_operation_sync(execute_query)
return result

def execute_query(session):
return session.transaction().execute(')
Даёт ошибку connection failed и всё тут. Посмотрел на код в ответе, перенёс функцию execute_query(session) внутрь главной и всё заработало!
Спасибо!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы