SQLite3 fetchall 实际上并未获取全部

问题描述 投票:0回答:1

我创建了一个包含 4 行的简单表并用数据填充它。当我检查解释器中的表格时,所有数据都存在并且正确。当我通过Python代码运行

fetchall()
时,我只得到2行。发生什么事了?

这是表格(端口设置):

portName  portPrefix  portOption  portDeadband
--------  ----------  ----------  ------------
mInput1   min1_       1           0.1
mInput2   min2_       1           0.1
mInput3   min3_       1           0.1
mInput4   min4_       1           0.1

这是代码:

db = sqlite3.connect(dbLocation)
ptr = db.cursor()

query = 'SELECT * FROM portSettings;'
ptr.execute(query)
results = ptr.fetchall()
print(f'--------> {ptr.rowcount} results.  voila! ↓ --------')
print(results)

结果如下:

--------> -1 results.  voila! ↓ --------
[('mInput3', 'min3_', 1, 0.1), ('mInput4', 'min4_', 1, 0.1)]

所以,最重要的是:其余数据在哪里?第二,为什么

ptr.rowcount()
是-1??

python sqlite
1个回答
0
投票

您的示例仅打印最后两行——在我的测试中,我得到了全部四行:

$ ls -al | grep foo
-rw-r--r--   1 user  staff    8192 Oct 13 14:37 foo.db
-rw-r--r--   1 user  staff     252 Oct 13 14:38 foo.py

$ cat foo.py 
import sqlite3

dbLocation = 'foo.db'
db = sqlite3.connect(dbLocation)
ptr = db.cursor()

query = 'SELECT * FROM portSettings;'
ptr.execute(query)
results = ptr.fetchall()
print(f'--------> {ptr.rowcount} results.  voila! ↓ --------')
print(results)

$ python3.11 foo.py 
--------> -1 results.  voila! ↓ --------
[('mInput1', 'min1_', 1, 0.1), ('mInput2', 'min2_', 1, 0.1), ('mInput3', 'min3_', 1, 0.1), ('mInput4', 'min4_', 1, 0.1)]

由于您只看到最后两行,所以我只能想到几种可能性:

  1. 如果您打开了
    sqlite3
    解释器,也许您有一笔未提交的交易
  2. 根据
    dbLocation
    的值,您的Python应用程序和sqlite3解释器可能打开了不同的
    .db
    文件

ptr.rowcount
行为已记录。要更改计数,您可以使用
len(results)
:

$ cat foo.py  | grep len
print(f'--------> {len(results)} results.  voila! ↓ --------')

$ python3.11 foo.py 
--------> 4 results.  voila! ↓ --------
[('mInput1', 'min1_', 1, 0.1), ('mInput2', 'min2_', 1, 0.1), ('mInput3', 'min3_', 1, 0.1), ('mInput4', 'min4_', 1, 0.1)]

解决这个问题可能会有所帮助

ptr.rowcount
,也许这可能会帮助您获得一些关于为什么只看到 2 行的线索?

© www.soinside.com 2019 - 2024. All rights reserved.