1. prefer

    19.01.2010

    0 ↑
    0 ↓
    Всем привет!
    Вот такая конструкция не работает:
    conn = psycopg2.connect("user=postgres host=localhost password=123 port=5432")
    cur = conn.cursor()
    cur.execute("CREATE DATABASE Project")
    В связи с чем вопрос: как добавить базу данных?

    ps: Прошу прощенья за дубль в форуме по django.
  2. prefer

    19.01.2010

    0 ↑
    0 ↓
    По дефолту запрос выполняется в транзакции, помогло -
    conn.set_isolation_level(0) 
  3. Иван Сагалаев

    19.01.2010

    0 ↑
    0 ↓

    Ещё вариант: таки завернуть всё вручную в транзакцию (execute('begin') .. execute('commit')), потом завернуть это в декоратор и использовать как context manager :-)

  4. igorekk

    19.01.2010

    0 ↑
    0 ↓
    Иван, а можно вот примерчик вышеописанного?:)
  5. Иван Сагалаев

    19.01.2010

    5 ↑
    0 ↓
    from contextlib import contextmanager
    
    @contextmanager
    def transaction_cursor(connection):
        cursor = connection.cursor()
        try:
            cursor.execute('begin')
            yield cursor
            cursor.execute('commit')
        except:
            cursor.execute('rollback')
            raise
    
    with transaction_cursor(connection) as c:
        # всё под with будет завёрнуто в транзакцию
        c.execute('...')
        c.execute('...')
        c.execute('...')
    
  6. igorekk

    19.01.2010

    0 ↑
    0 ↓
    Спасибо большое. Читать читал про такое, но на практике не сталкивался :)

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.