如何使用 SQlAlchemy 声明式方式插入数据

Dar*_*oBB 5 sqlalchemy flask

我可以通过这种方式将数据添加到我的数据库:

a = Model_tbl_name("3", "da", "3", "eheeee", "", "", "", "", "", "", "", "", func.now(), func.now()) 

db_session.add(a) 
db_session.commit()
Run Code Online (Sandbox Code Playgroud)

但我不能这样做:

data = Model_tbl_name.insert().values({"title_hr":request.form['title_hr'],"text_hr":request.form['text_hr']})
Run Code Online (Sandbox Code Playgroud)

我尝试过类似的方法,但没有帮助:

data = db_session.Model_tbl_name.insert().execute({"title_hr":request.form['title_hr'],"text_hr":request.form['text_hr']})
Run Code Online (Sandbox Code Playgroud)

我最初的动机是传递所有表单数据,例如 JSON,我希望它像这样工作:

data = db_session.Model_tbl_name.insert().execute(json.loads(new_request_form))
Run Code Online (Sandbox Code Playgroud)

在文档中,据说可以完成: http://docs.sqlalchemy.org/en/rel_0_9/core/dml.html ?highlight=insert%20values#sqlalchemy.sql.expression.Insert.values

像这样:

users.insert().values({"name": "some name"})
Run Code Online (Sandbox Code Playgroud)

但没有帮助,我就是无法得到它。我怎样才能让它工作,我必须在values()方法中提供所有JSON数据吗?我应该如何编写该命令才能使其工作?

其次,我怎样才能抓住这个错误,因为我在 Flask 中没有收到错误,只是停止工作。我可以弄清楚如何在使用 SQLAlchemy 声明性方式时显示错误。

PS我使用Flask框架,SQLAlchemy,Python版本是3.4

Boa*_*oaz 3

好吧,我认为你不能做 db_session.Class_name。
这是你可以用它做的事情:http://docs.sqlalchemy.org/en/rel_1_0/orm/session_basics.html

如果你的问题是默认值,你可以在Model中定义相关的默认值,然后就可以构造一个字段较少的对象。

a = Model_tbl_name(title_hr=request.form['title_hr'],
                   text_hr=request.form['text_hr'])
Run Code Online (Sandbox Code Playgroud)

如果你还想通过字典,可以执行以下操作:

dataDict = json.loads(new_request_form)
a = Model_tbl_name(**dataDict)
db_session.add(a) 
db_session.commit()
Run Code Online (Sandbox Code Playgroud)

恕我直言 - 第一种方法更具可读性和可靠性(您可以检查参数的有效性 - 它们与对象匹配) - >在一天结束时,更安全......