我创建了一个包含 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??
您的示例仅打印最后两行——在我的测试中,我得到了全部四行:
$ 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)]
由于您只看到最后两行,所以我只能想到几种可能性:
sqlite3
解释器,也许您有一笔未提交的交易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 行的线索?