繁体   English   中英

python-sqlite3返回错误结果

[英]python - sqlite3 returning wrong results

如果直接在同一数据库的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

如果您100%确定要使用同一数据库,则可能是通过命令行工具使用了较新的SQLite库版本。

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

print sqlite.sqlite_version

在Python和

sqlite3 -version

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM