Python SQLite INNER JOIN对列名加空格



我一整天都在尝试不同的SQL查询到python的Sqlite DB的许多不同的变化,虽然我可以让他们中的一些工作,我不知道为什么他们做或不工作。

我不能让下面的查询工作。我最初使用三引号,这样我可以使它在多行上更可读,但是不同的查询不能这样工作,直到我把它改为单撇号,所以我对下面的例子做了同样的事情。

cur.execute('select "LeadDataTable.Lead ID" AS "Lid", "LeadDataTable.Email", "LEINTable.LeadID", "LEINTable.DLin" from "LeadDataTable" inner join "LEINTable" ON "Lid" = "LEINTable.LeadID" ')
records = cur.fetchall()
print(records)

我试着用不同的方式使用nothing,撇号,引号,以及任何被称为的东西。到目前为止,一切都没有奏效。目前,我得到一个空数组返回。我得到一个"模棱两可的列名"错误,和一个"列不存在"错误。但是,当我像下面这样分别运行查询时,它可以工作-

cur.execute('select "Lead ID" as "LeadID", Email from LeadDataTable')
records = cur.fetchall()
print(records)
cur.execute('select LeadID, DLin from LEINTable')
records = cur.fetchall()
print(records)

我不知道何时使用哪些字符的规则,如果它是特定于我的编码环境/linter?

"LeadDataTable.Lead ID"是字符串字面值,而不是列的值。

仅在需要时使用双引号(或方括号或反引号)。
在这种情况下,只有列Lead ID需要它们,并且在ON子句中不能使用Lead ID的别名:

cur.execute('select LeadDataTable."Lead ID" AS Lid, LeadDataTable.Email, LEINTable.LeadID, LEINTable.DLin from LeadDataTable inner join LEINTable ON LeadDataTable."Lead ID" = LEINTable.LeadID')

或者,让它更容易读:

sql = '''
select LeadDataTable."Lead ID" AS Lid, 
LeadDataTable.Email, 
LEINTable.LeadID, 
LEINTable.DLin 
from LeadDataTable inner join LEINTable 
ON LeadDataTable."Lead ID" = LEINTable.LeadID
'''
cur.execute(sql)

最新更新