【问题标题】:Sqlite - Use backticks (`) or double quotes (") with pythonSqlite - 在 python 中使用反引号 (`) 或双引号 (")
【发布时间】:2014-09-28 05:59:27
【问题描述】:

我在 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 等)。

【问题讨论】:

  • @Martijn Pieters 问题是,当我使用单引号时,我实际上得到了一个不正确的输出。
  • 请注意,您不能在此处使用单引号,单引号仅用于文字字符串值:sqlite.org/lang_keywords.html
  • 嗯。出于某种原因——也许你可以解释一下——当我做"select 'rowid', * from table;" 时,我得到了('rowid', name,...)。正如 laalto 刚刚发布的那样 - “单引号用于字符串文字,而不是标识符。”
  • 抱歉,我的条款搞混了。您需要对标识符使用双引号。或反引号。或方括号。
  • 方括号在 sqlite 中工作......我不知道。谢谢大家。

标签: python sqlite double-quotes backticks


【解决方案1】:

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

为了与 MySQL 兼容,SQLite 还 allows 对标识符使用单引号,对字符串使用双引号,但前提是上下文使含义明确。 (在SELECT 'rowid' ... 中,允许使用字符串,因此您会得到一个字符串。) 如果可能,请始终使用标准 SQL 引号。

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

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

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

【讨论】:

    【解决方案2】:

    优先使用双引号来引用标识符,例如列名或表名。这是 SQL 标准。

    反引号也可以,但仅支持 MySQL 语法兼容性。

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

    延伸阅读:http://www.sqlite.org/lang_keywords.html

    【讨论】:

    • 但是反引号可以在任何地方使用吗?为什么不利用这个优势来编写更简洁的代码呢?
    • 是的,他们会的,但如果你还是要写新的 SQL,最好用双引号。
    • @Dylan:反引号也适用于任何地方,SQLite 支持独立于平台的语法。但是,双引号是标准的首选形式。
    • :) 我可以只使用反引号,然后用 (\") 替换所有 (`) :P
    • @laalto 感谢您的参考。
    猜你喜欢
    • 2017-12-07
    相关资源
    最近更新 更多