如何連接並查詢配置了DA的關係數據庫ZPsycopgDA在Zope產品中?如何從ZOPE產品直接查詢關係數據庫/ SQL數據庫?
我想使用綁定參數發送我自己的SQL查詢,並接收結果優選爲一組Result對象。
我不想使用ZSQLMethods,因爲我無法事先爲每個查詢創建一個,而且ZSQLMethods不支持綁定參數。
如何連接並查詢配置了DA的關係數據庫ZPsycopgDA在Zope產品中?如何從ZOPE產品直接查詢關係數據庫/ SQL數據庫?
我想使用綁定參數發送我自己的SQL查詢,並接收結果優選爲一組Result對象。
我不想使用ZSQLMethods,因爲我無法事先爲每個查詢創建一個,而且ZSQLMethods不支持綁定參數。
Zope的數據庫適配器(DA)的代碼庫是一些最古老的代碼仍然。在Zope中使用,因此被有些過時當你調用一個Zope DA,你會得到一個數據庫連接對象(DB實例),反過來有一個查詢方法:
connection = context.idOfZPsycoPGDA()
connection.query('SELECT * FROM your_table')
的查詢方法是不完全一個Python數據庫API標準方法,它接受由\0
空字符分隔的多個SQL語句,但如果有多個SQL語句,則不支持SELECT聲明。
的ZPsychoDA查詢方法也接受查詢參數:
connection.query('SELECT * FROM your_table WHERE id=?', ('yourid',))
,但更重要的是,ZPsychoDA適配器還可以訪問常規數據庫光標:
c = connection.cursor()
c.query('SELECT * FROM your_table WHERE id=?', ('yourid',))
我的建議是隻使用並通過數據庫光標執行常規Python DB API調用。
數據庫連接器實例應提供接受SQL命令的query()方法。而你通過restrictedTraverse獲得通過收購數據庫適配器實例的保持(或遍歷(「/路徑/要/ DA」):
result = context.my_zpyscopgda.query("select * from foo")
result = context.restrictedTraverse('/path/to/my_zpyscopgda').query("select * from foo")
感謝您的全面回答。我發現connection.query()的結果格式有點奇怪,但是使用Shared.DC.ZRDB.Results.Results(result)得到了一個很好的結果集。 – robcast 2011-03-03 09:42:12