2012-02-10 89 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