2012-02-12 50 views
2

我只是使用SQLAlchemy核心,並且無法獲取sql以允許我添加where子句。我希望這個非常通用的更新代碼能夠在我所有的表格上工作。意圖是這是對應於每個表的通用插入/更新函數的一部分。通過這樣做,它允許使用非常簡短的測試代碼和簡單的CLI實用程序,只需傳遞所有參數選項即可,而無需爲每個表單獨分配子命令。如何在SQLAlchemy中編寫生成更新

它需要更多的調整來實現它,但應該現在就做更新就好了。但是,儘管SQLAlchemy引用了生成查詢,但它並不區分選擇&更新。我已經回顧了SQLAlchemy文檔,基本SQLAlchemy,stackoverflow和幾個源代碼存儲庫,但沒有發現任何東西。

u  = self._table.update() 
non_key_kw = {} 
for column in self._table.c: 
    if column.name in self._table.primary_key: 
     u.where(self._table.c[column.name] == kw[column.name]) 
    else: 
     col_name = column.name 
     non_key_kw[column.name] = kw[column.name] 

print u 
result = u.execute(kw) 

哪些失敗 - 它似乎並沒有認識到WHERE子句:

UPDATE struct SET year=?, month=?, day=?, distance=?, speed=?, slope=?, temp=? 
FAIL 

我無法找到這種方式建立一個更新的任何實例。任何建議?

回答

1

「where()」方法是生成的,因爲它返回一個新的Update()對象。舊的沒有修改:

u = u.where(...) 
+0

謝謝 - 這工作完美。我想我很高興這是我的一個愚蠢的錯誤,而不是一個好工具中的錯誤。 :-) – 2012-02-16 05:03:17