2013-04-25 53 views
0

問題:SQLAlchemy/Python/Pyramid寫入數據庫問題

我正在處理一些代碼,這是爲了在鏈接表中創建新記錄。鏈接表的主鍵是一個自動編號,其他兩個字段是VARCHAR,長度爲10.

我遇到的問題是我似乎無法將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 

我希望在這個問題上有什麼想法或意見

感謝您的時間

+1

請永遠不要手動構建SQL查詢,尤其是從用戶輸入中獲取的位。您的代碼易受SQL注入攻擊。始終使用綁定參數:http://docs.sqlalchemy.org/en/latest/core/expression_api.html?#sqlalchemy.sql.expression.text – Sergey 2013-04-25 19:46:50

回答

1

首先,我如果可以的話,會查看有點不同的SQL查詢。 (?我想這取決於,你有沒有依據「tblParts」的典範我會用一個例子假設有一個模型對象「部分」):

從那裏,我很生疏確切的語法,但我認爲你可以做這樣的事情

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

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

DBSession.add(partToOrder) 

return{} 

您可能需要「部分」案爲字符串(str(part))如果它是一個鑄造的問題。

祝你好運,

0

這將是巨大的,如果你想與我們分享您的模型以及PartsByOrder功能的機構。