Как насколько я могу судить, это не синтаксическая ошибка (см. № 2), это не ошибка механизма, поскольку ORM может правильно выполнить эквивалентную запись (см. № 1), он также находит таблицу, которую должен записать. (см. № 3). Я думаю, что проблема в том, что транзакция не фиксируется, и я попытался решить эту проблему (см. № 4), но это не решило проблему. Можно ли создать вложенную транзакцию и что, так сказать, начнется «первым»?
Спасибо за любые ответы.
Некоторые предыстории:
- Я знаю, что ORM облегчает это, и использовал эту функцию, и она работает, но слишком медленно для нашего приложения. Мы решили попробовать использовать необработанный sql для этой конкретной функции записи из-за того, как часто она вызывается, а также ORM для всего остального. Эквивалентный метод с использованием ORM работает отлично, и для обоих используется один и тот же движок, так что это не может быть проблемой движка, верно?
- Я выдал пример SQL, который метод, использующий необработанные конструкции sql, напрямую передает базу данных и который читается нормально, поэтому я не думаю, что это синтаксическая ошибка.
- он правильно взаимодействует с базой данных и может найти таблицу, поскольку любые синтаксические ошибки в именах таблиц и столбцов вызывают программную ошибку, поэтому он не просто выбрасывает данные в «пустоту», так сказать.< /p>
- Моя первая мысль после прочтения заключалась в том, что это ошибка транзакции и что транзакция создавалась, а не закрывалась, и поэтому построил оператор выполнения. как таковой, чтобы гарантировать, что транзакция была правильно создана и зафиксирована.
Код: Выделить всё
with self.Engine.connect() as connection: connection.execute(Insert_Statement) connection.commit - Так называемое «Вставка оператора» было преобразовано в текст с помощью функции «текст» sqlalchemy, я не совсем понимаю, почему это не будет выполнено, если я передам созданную строку непосредственно в оператор выполнения, но упомяну об этом, если это актуально.
Python3 работает на отдельном экземпляре ec2, а база данных postgres — на другом. В частности, таблица представляет собой гипертаблицу с масштабированием по времени, принимающую данные в реальном времени, поэтому требуется очень быстрая запись, но, вероятно, это не актуально.
В настоящее время использование pg8000 в качестве диалекта без какой-либо конкретной причины, кроме psycopg2, выдавало ошибку. ошибки при попытке выполнить эквивалентный метод с использованием ORM.
Подробнее здесь: https://stackoverflow.com/questions/696 ... t-no-error