Выполните запрос SQL с Elixir

По моему скромному мнению, существует один большой svn gui клиент, SmartSVN. Это - коммерческий проект, но существует версия основы (функциональных 100%), ведьма может использоваться бесплатно, даже в коммерческих целях. Это записано в Java, таким образом, это является многоплатформенным (это требует Java солнца* пакет) http://smartsvn.com

5
задан Community 23 May 2017 в 12:30
поделиться

5 ответов

Dammit. Я знал, что ответ будет прямо под моим носом. Предполагая, что вы настроили ваше соединение, как я.

metadata.bind = 'postgres://user:pw@host/db'

Решением это было так же просто, как

conn = metadata.bind.engine.connect()

old_lvl = conn.connection.isolation_level
conn.connection.set_isolation_level(0)
conn.execute('vacuum analyze table')
conn.connection.set_isolation_level(old_lvl)

, это похоже на то, что было предложено здесь PostgreSQL - Как запустить вакуум от кода вне блока транзакции? Потому что под ним все, sqlalchemy использует psycopg, чтобы сделать соединение с postgres. Connection.Connection - это прокси к соединению PSYCOPG. Однажды я понял это, эта проблема вернулась к уму, и я решил взять на него другого удара.

Надеюсь, это поможет кому-то.

10
ответ дан 18 December 2019 в 14:47
поделиться

Если у вас есть доступ к сеансу SQLAlchemy, вы можете выполнять произвольные операторы SQL с помощью его метода execute :

session.execute("VACUUM FULL ANALYZE table")
0
ответ дан 18 December 2019 в 14:47
поделиться

(Depending on the Postgres version) you most likely do not want to run "VACUUM FULL".

0
ответ дан 18 December 2019 в 14:47
поделиться

UnboundExecutionError говорит, что ваш сеанс не привязан к механизму и нет способа обнаружить механизм из запроса, переданного в execute () . Вы можете либо использовать engine.execute () напрямую, либо передать дополнительный параметр mapper (либо сопоставитель, либо сопоставленная модель, соответствующая таблице, используемой в запросе) в session.execute () , чтобы помочь SQLAlchemy обнаружить правильный механизм.

InternalError означает, что вы пытаетесь выполнить этот оператор внутри явно (с помощью оператора BEGIN) запущенной транзакции. Выполняли ли вы перед этим несколько операторов без вызова commit () ? Если это так, просто вызовите метод commit () или rollback () , чтобы закрыть транзакцию перед выполнением VACUUM. Также обратите внимание,

1
ответ дан 18 December 2019 в 14:47
поделиться

Нужно привязать сеанс к движку

session.bind = metadata.bind
session.execute('YOUR SQL STATEMENT')
2
ответ дан 18 December 2019 в 14:47
поделиться
Другие вопросы по тегам:

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