我有一个在 sqlite3 中存储一些数据的 python 程序,我想在不同的操作系统中使用它。
在 Windows 7 中,该程序运行良好,但在 Ubuntu 12.04 中却不行。
问题是:当我在我的 sqlite 数据库中存储一个空元组(作为来自 的字符串 " ".join( ... )
)然后在 windows 中读回它时,我得到一个空元组()
,而在 Ubuntu 中我得到None
.
我的测试代码是:
import sqlite3
import os
def adapt_tuple(tpl):
return " ".join(str(n) for n in tpl)
def get_tuple(s):
return tuple([int(x) for x in s.split()])
emptytuple=()
goodtuple=(1,2)
sqlite3.register_adapter(tuple,adapt_tuple)
sqlite3.register_converter("tuple_of_ints",get_tuple)
myconn=sqlite3.connect('test.db',detect_types=sqlite3.PARSE_DECLTYPES)
myconn.execute("""CREATE TABLE test(number int, tuple tuple_of_ints);""")
goodentry=(1,goodtuple)
emptyentry=(2,emptytuple)
myconn.execute("""INSERT INTO test VALUES (?,?);""", goodentry)
myconn.execute("""INSERT INTO test VALUES (?,?);""", emptyentry)
for row in myconn.execute("""SELECT * FROM test;"""):
print row
myconn.close()
os.remove('test.db')
这给了我一个输出:
(1, (1, 2))
(2, ())
在 Windows 和:
(1, (1, 2))
(2, None)
在ubuntu中。
我已经检查过了
get_tuple(adapt_tuple(emptytuple))
在两个系统中给出相同的输出()
,所以它必须与通过 sqlite3 有关。
python 中的输出sys.version_info
在两个系统中是相同的,sqlite3.version
所以我很确定这与操作系统有关。
总而言之,我的问题是:为什么会这样?以及如何让 Ubuntu 版本在最后返回一个空元组?
感谢您的回复。苹果。
笔记
我最初应该提到,如果我打印我的adapt_tuple
输出,我会" "
在两个操作系统上得到。