python - sqlite3返回错误的结果

时间:2014-01-03 17:18:33

标签: python sqlite

如果我直接在同一个数据库的sqlite3.exe中运行此查询,我会得到20条记录。

当我使用sqlite3在Python中运行它时,它会返回表a(200000 +)中的每条记录。

import sqlite3
db = sqlite3.connect("path/to/my.db")
c = db.cursor()
c.execute("""SELECT a.*, b.*, c.* FROM t_data a NATURAL LEFT JOIN t_finished b
            NATURAL LEFT JOIN user_info c WHERE user_id=1;""")
for row in c:
    print row

这怎么可能?


这是表格的相关方式。

CREATE TABLE t_data ( t_id INTEGER  REFERENCES t_finished (t_id),
    ui_id INTEGER  NOT NULL  REFERENCES user_info (ui_id), ...);

CREATE TABLE t_finished ( t_id INTEGER  PRIMARY KEY, ...);

CREATE TABLE user_info ( ui_id INTEGER  PRIMARY KEY, user_id INTEGER  REFERENCES accounts, ...);

他们之间不会共享其他列。


尝试使用显式JOINS我遇到了同样的问题:

SELECT * FROM t_data a LEFT JOIN t_finished b USING(t_id) LEFT JOIN user_info c USING(ui_id) WHERE user_id=1;

此查询在sqlite3.exe中有效,但在Python中引发错误:

OperationalError: cannot join using column ui_id - column not present in both tables

1 个答案:

答案 0 :(得分:0)

如果您100%确定您正在处理同一个数据库,那么您可能正在使用较新的SQLite库版本和命令行工具。

您可以验证正在使用的版本:

print sqlite.sqlite_version

在Python和

sqlite3 -version

使用命令行工具。您可以检查sqlite3 changelog以查看是否有任何相关更改,或者您只需将SQLite3 DLL更新为最新版本,以确保您没有遇到错误或新功能。