【问题标题】:sqlite3.OperationalError - no column existssqlite3.OperationalError - 不存在列
【发布时间】:2021-09-08 21:47:08
【问题描述】:

我在 SQLite 中运行简单的选择语句时遇到问题。

我的数据库中的一列名称中有“”引号。我将如何在查询中选择此列?

这是表架构:

我尝试了各种 Select 语句,但没有骰子。

到目前为止,这是我的代码:

这是我遇到的错误:

选择此列的正确语法是什么:[“地址”]?

【问题讨论】:

  • 使用方括号:SELECT ["Address"],....
  • 感谢您的快速回复 - 我试了一下,我得到了同样的错误:sqlite3.OperationalError: no such column: Address.

标签: python sql database sqlite schema


【解决方案1】:

Sqlite 使用方括号和双引号来表示封闭的文本是标识符 (docs)。但是,通过同时使用两者,如下所示:

CREATE TABLE (["Address"] TEXT...

双引号成为标识符的一部分。

如果您想在查询中使用该列,您需要在名称周围加上方括号包括双引号,因为它们是名称的一部分,如Q1 中所示这个脚本。

import sqlite3    
    
DDL1 = """DROP TABLE IF EXISTS test"""    
DDL2 = """\    
CREATE TABLE test (    
 ["Address"] text)    
"""    
    
Q1 = """SELECT ["Address"] FROM test"""    
    
    
with sqlite3.connect('68132004.db') as conn:    
    cur = conn.cursor()    
    cur.execute(DDL1)    
    cur.execute(DDL2)    
    cur.execute(Q1)    
    

但是,您可以通过使用ALTER TABLE 指令重命名列来使您的生活更轻松(这里的双引号表示包含的文本是标识符):

DDL3 = """ALTER TABLE test RENAME COLUMN ["Address"] TO "Address" """    
    
Q2 = """SELECT Address FROM test"""    
    
    
with sqlite3.connect('68132004.db') as conn:    
    cur = conn.cursor()    
    cur.execute(DDL3)    
    cur.execute(Q2) 

或者您可以删除表并重新创建它而不使用双标识符引用的列名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 2021-04-08
    • 2020-12-01
    相关资源
    最近更新 更多