2012-02-10 97 views
2

通常,我們只能使用SQL語句作爲SELECT條件(使用WHERE子句)。但是,使用python(或者任何引發SQL的語言)語句作爲SELECT條件有時很有用。如何在SQLite中使用python語句作爲SELECT條件?

例如,存在示例in the document of sqlite3 module of python,其中結構Point被存儲到表中。然而,使用結構Point很難查詢表格。說,我想要做SELECT p FROM table WHERE P.x=4選擇x座標等於4的所有點。但是SELECT語句不起作用,因爲P.x是一個python語句而不是SQL語句。

另一個例子是,當SELECT條件對於SQL語言來說過於複雜時。比如說,我想選擇所有的mod 4是3的整數或類似的東西。

那麼,有沒有這樣做的想法?謝謝!

編輯:關於zam664的答案,第一個例子當然可以使用P_X和P_Y。但是,如果p是未知長度的列表(可以使用適配器存儲在表中),我想要SELECT p FROM table WHERE 2 in p。我認爲這是一個有用的案例。

+2

只是一個說明;由於數據庫不會執行Python,而只會執行SQL(即Python查詢需要自動轉換爲SQL),所以如果您使用Python編寫它們,那麼在SQL中表達的任何查詢都會過於複雜。關於複雜性,Python可能會幫助你做的唯一事情就是自動完成數據庫中查詢的一部分,並在得到結果後自動執行代碼中的一部分。 – 2012-02-10 06:54:33

回答

0

您將不得不拆分SQL和Python代碼之間的負載。您需要正確構建表中的數據,以便SQL可以獲取大部分內容,然後記錄複雜內容的其餘部分。

你應該能夠在SQLite中獲得大部分內容,這樣SQL查詢就可以工作。你只需要挖掘你的數據。例如,你有x和y字段的點需要在SQLite中分成兩個字段,像P_X和P_Y。

SQLite是一個關係DBMS而不是對象DBMS。如果您需要一個對象DBMS,那麼SQLite是該任務的錯誤產品。

+0

感謝您的回答。但是,有些情況下這種拆分數據方法可能失敗。有關詳細信息,請參閱編輯。 – Roun 2012-02-10 07:16:20

0

由於數據存儲爲a;您應該可以執行類似以下操作:

SELECT point FROM test WHERE point LIKE '%x=4% 

保留使用不正確的表名和列名的權利。

+0

上面有什麼運氣? – Kristofer 2012-02-13 06:59:44