【问题标题】:SQLAlchemy / Python / Pyramid Write To Database IssueSQLAlchemy / Python / Pyramid 写入数据库问题
【发布时间】:2013-04-18 19:56:48
【问题描述】:

问题:

我正在编写一些旨在在链接表中创建新记录的代码。链接表的主键是自动编号,另外两个字段是长度为 10 的 VARCHAR。

我遇到的问题是我似乎无法将 partID 放入表中。如果您查看 sql 输出,您可以清楚地看到它在表中写入了 None 和 u'1'(orderID)。所以这告诉我它接收到 orderID 就好了。您还可以看到,在将变量传递给新对象之前,我进行了打印以找出变量内部的内容。它有 3 个,这是正确的 partId。在创建新对象和写入表之间的某个地方,它传递了一个空值。

我尝试过强制转换它,我尝试过从数据库中提取 partID 的不同方法等,但我终其一生都无法弄清楚出了什么问题。

代码:

def updateOrderParts_view(request):
    part = None
    partToOrder = None
    idnum = None

    part = DBSession.execute(\
    "SELECT partID "+\
    "FROM tblParts "+\
    "WHERE partName = " + "'" +request.POST['partName'] +"'").fetchone()

    print "<---DEBUG--->"
    print part['partID']

    partToOrder = PartsByOrder(part['partID'], request.POST['orderID'])

    DBSession.add(partToOrder)
    return{}

终端输出:

<---DEBUG--->
3
2013-04-24 08:14:47,985 INFO  [sqlalchemy.engine.base.Engine][Dummy-2] INSERT INTO "tblPartsByOrder" ("partID", "orderID") VALUES (?, ?)
2013-04-24 08:14:47,985 INFO  [sqlalchemy.engine.base.Engine][Dummy-2] (None, u'1')
2013-04-24 08:14:47,986 INFO  [sqlalchemy.engine.base.Engine][Dummy-2] COMMIT

我将不胜感激有关此问题的任何想法或 cmet

感谢您的宝贵时间

【问题讨论】:

  • 请,请,永远不要手动构建 SQL 查询,尤其是从用户输入中获得的位。您的代码容易受到 SQL 注入的攻击。始终使用绑定参数:docs.sqlalchemy.org/en/latest/core/…

标签: python database sqlalchemy pyramid


【解决方案1】:

首先,如果可以的话,我会考虑做一些不同的 SQL 查找。 (我想这取决于,你有一个基于“tblParts”的模型吗?我将使用一个假设有一个模型对象“Part”的例子):

part = DBSession.query(Part.partID).filter(Part.partName == request.POST['partName']).first()

从那里,我对确切的语法生疏了,但我认为你可以做类似的事情

print "<---DEBUG--->"
print part

partToOrder = PartsByOrder(part, request.POST['orderID'])

DBSession.add(partToOrder)

return{}

如果是转换问题,您可能需要将“part”转换为字符串 (str(part))。

祝你好运,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 2021-07-11
    • 2015-02-06
    • 2011-05-30
    • 1970-01-01
    相关资源
    最近更新 更多