как flask-sqlalchemy отключить возвращение идентификатора при вставке данных - PullRequest
0 голосов
/ 24 марта 2019

Я пытаюсь вставить данные в PostgreSQL 8.3.23 с помощью Flask-SQLAlchemy == 2.3.2, ошибки показывают, что INSERT statement is not supported in this version of Greenplum Database.так как я могу отключить возврат id в (flask-) sqlalchemy при вставке.

class BU(db.Model):
    __tablename__ = 'bu'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    bu_code = db.Column(db.String(125), index=True, comment=u'some')
    bu = db.Column(db.String(125), nullable=False, comment=u'some')
    is_game = db.Column(db.Boolean, default=False, comment=u'some')
    status = db.Column(db.Integer, default=0, info={'table_enums': [{'value': 0, 'text': u"some"}, {'value': 1, 'text': u"some"}]})
    add_time = db.Column(db.DateTime, default=datetime.now, comment=u'some')
ipdb> res = BU(bu_code='333', bu='hello')
ipdb> db.session.add(res)
ipdb> db.session.flush()
*** NotSupportedError: (psycopg2.NotSupportedError) The RETURNING clause of the INSERT statement is not supported in this version of Greenplum Database.
 [SQL: 'INSERT INTO bu (bu_code, bu, is_game, status, add_time) VALUES (%(bu_code)s, %(bu)s, %(is_game)s, %(status)s, %(add_time)s) RETURNING bu.id'] [parameters: {'status': 0, 'bu': 'hello', 'is_game': False, 'bu_code': '333', 'add_time': datetime.datetime(2019, 3, 24, 16, 53, 49, 613000)}] (Background on t
his error at: http://sqlalche.me/e/tw8g)

Заранее спасибо

1 Ответ

1 голос
/ 24 марта 2019

Вам необходимо установить для implicit_returning create_engine параметр значение False.

engine = create_engine(url, implicit_returning=False)

Когда True, RETURNING-совместимая конструкция, еслиavailable, будет использоваться для извлечения вновь сгенерированных значений первичного ключа, когда выдается однострочный оператор INSERT без существующего предложения returning ().Это относится к тем бэкэндам, которые поддерживают RETURNING или совместимую конструкцию, включая PostgreSQL, Firebird, Oracle, Microsoft SQL Server.Установите это значение в False, чтобы отключить автоматическое использование RETURNING.

Flask-SSQLAlchemy не предоставляет непосредственное создание движка, возможно, можно переопределить SQLAlchemy.apply_driver_hacks , чтобы добавитьдополнительный параметр.

Этот метод вызывается перед созданием движка и используется для добавления в параметры определенных хаков драйверов.Параметр options представляет собой словарь аргументов ключевого слова, который затем будет использоваться для вызова функции sqlalchemy.create_engine ().

Существует выдающийся запрос-запрос , чтобы представить более простойспособ сделать это.

...