q = request.form['name']
# do for 12 more fields
db.session.add(q)
request.form['name']
将返回一个unicode值。那你就…
db.session.add(q)
会话的目标是跟踪实体(Python对象),而不是你似乎想这样做的单个unicode值。因此,你应该添加具有映射关系的User对象(例如ORM教程的“映射”部分中显示的对象),但实际上是在传递简单的unicode值
你所使用的只是sqlAlchemy的一部分:ORM(对象关系映射器)。ORM将尝试做一些事情,例如允许你创建一个新的python对象,并通过将对象“添加”到会话中来自动生成sql。
a = MyEntity()
session.add(a)
session.commit() # Generates sql to do an insert for the table that MyEntity is for
请记住,你可以在不使用ORM功能的情况下使用sqlAlchemy。你只db.execute('INSERT...', val1, val2
)需要替换已经“裸”的sql。sqlAlchemy将为你提供连接池等(尽管如果你使用的是sqlite,则可能不关心连接池)。
如果你想了解Flask-sqlAlchemy,我首先建议你通过使用简单的脚本(如教程中所示)尝试一下sqlAlchemy的工作原理(尤其是ORM方面),然后你将了解Flask-sqlAlchemy的工作原理。 。
当你将非模型对象添加到会话中时,你将获得UnmappedInstanceError
。
在你的情况下,q
可能是unicode字符串,而不是模型对象。(看来你使用的是Python 2.x,因为在Python 3.x中,它将显示为str),这是导致以下问题的根本原因UnmappedInstanceError: Class '__builtin__.unicode' is not mapped:
File "C:\Users\Me\repos\mandj2\app\views.py", line 170, in add_manentry
db.session.add(q)