Sqlite - 使用反引号(`)或双引号(“)与python

时间:2014-08-05 14:18:26

标签: python sqlite double-quotes backticks

我在Stack Overflow中看到了一个与Android类似的问题,但我想知道是否应该使用反引号(`)或双引号(“) - 使用Python - 来选择表名或rowid或者你有什么。

我试过单引号 - 就像这个select 'rowid', * from 'tbl' order by 'rowid'。单引号在某些情况下有效,但并非全部。我学会了使用双引号或反引号,我看着SQLite Database Browser,我注意到它使用了反引号。

我真的很想在Python中使用双引号,因为我来自Java,所以cursor.execute("select 'rowid',* from 'table';")很自然,而且反引号也很容易(双引号会需要反斜杠并使查询看起来有点混乱)。但是,我只是想确保反引号是可移植的(所有版本的Windows,Linux,Os x等)。

2 个答案:

答案 0 :(得分:15)

SQL标准说字符串必须使用'single quotes',引用时标识符(例如表名和列名)必须使用"double quotes"

为了与MySQL兼容,SQLite还allows使用单引号作为标识符和双引号作为字符串,但仅当上下文使含义明确时。 (在SELECT 'rowid' ...中,允许使用字符串,因此您可以使用字符串。) 如果可能,请始终使用标准SQL引号。

为了与MySQL兼容,SQLite还允许`backticks`用于标识符。

为了与Microsft数据库兼容,SQLite还允许[brackets]用于标识符。

(这适用于所有SQLite版本。)

答案 1 :(得分:3)

首选双引号引用列名或表名等标识符。这是SQL标准。

Backticks也有效,但它们仅支持MySQL语法兼容性。

单引号用于字符串文字,而不是标识符。这就是为什么你在使用它们时会得到字面值。

进一步阅读:http://www.sqlite.org/lang_keywords.html