【问题标题】:Flask. SQLAlchemy. How do INSERT with primary key?烧瓶。 SQL炼金术。如何插入主键?
【发布时间】:2021-12-11 13:05:21
【问题描述】:

情况:

我有一个烧瓶应用程序,我需要在其中使用主键将行插入数据库的功能。

守则:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql://example:example@example:5432/example"

db = SQLAlchemy()
db.init_app(app)


class TestModel(db.Model):
    __tablename__ = 'test'

    id = db.Column(primary_key=True, autoincrement=False)
    value = db.Column(db.String())


@app.route("/test", methods=['GET'])
def test():
    model = TestModel()

    model.id = 1234 # force set primary key
    model.value = 'Some string'

    db.session.add(model)
    db.session.commit()

问题:

ORM 似乎添加了错误的行,因为日志中出现以下内容。

...

[SQL: INSERT INTO test (value) VALUES (%(value)s)]

...

我需要什么:

我需要它来执行类似于下面的 tha 的 SQL 代码。

INSERT INTO test (id, value)
VALUES      (1234, 'Some string')

问题:

如何让 flask-sqlalchemy ORM 插入带有预分配主键的行?

使用的包:

Python 3.9

烧瓶 1.1.2

Flask-SQLAlchemy 2.5.1

SQLAlchemy 1.4.13

编辑...

我不知道发生了什么。但我刚刚重新启动服务器,我的代码开始按预期工作。
谢谢大家的帮助!

【问题讨论】:

  • Flask==2.0.1Flask-SQLAlchemy==2.5.1SQLAlchemy==1.4.26 一起正常工作。生成代码[SQL: INSERT INTO test (id, value) VALUES (?, ?)] [parameters: (1234, 'Some string')].

标签: python python-3.x flask flask-sqlalchemy


【解决方案1】:

你可以使用类的方法来解决问题。

class ModelName(db.Model)
  __tablename__ = ..
  id = ..
  name = ..


  @classmethod
  def add_modelname(cls,par1,par2):
     try:
      instance = ModelName()
      instance.id = par1
      instance.value = par2
      db.session.add(instance)
      db.session.commit()
      return instance
     except Exception as e:
      print(e)
  

..

@app.route("/test", methods=['GET'])
def test():
   id1 = 1
   value1 = "gvhcv"
   ModelName.add_modelname(id1 , value1)
   flash("Successful")
   return render_template("index.html")

 

【讨论】:

    猜你喜欢
    • 2022-01-11
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 2022-07-19
    • 2016-10-02
    相关资源
    最近更新 更多