我在Python中使用sqlite3。
我的table:
cursor.execute("""create table student(rno int, name char(20), grade char, gender char, avg decimal(5,2), dob date);""")
其中cursor是我的游标对象的名称...
我使用cursor.description来显示列名,但是每个元组中有7个字符串,其中6个是None
print(cursor.description)
Output : (('rno', None, None, None, None, None, None), ('name', None, None, None, None, None, None), ('grade', None, None, None, None, None, None), ('gender', None, None, None, None, None, None), ('avg', None, None, None, None, None, None), ('dob', None, None, None, None, None, None))
在API中,很明显每个元组的前两个元素是必须的。但是我不这么认为。为什么?
此外,我应该在我的表中进行哪些更改,以获取设置为None的其他元素的值???
任何相关的帮助都是感激的......
5条答案
按热度按时间fruv7luv1#
DB API2.0的sqlite3只保证第一个项目。
它为每列返回一个7元组,其中每个元组的最后六项为None。
https://docs.python.org/3/library/sqlite3.html#sqlite3.Cursor.description
要打印所有的细节,我想你应该有一些数据。可能是添加一些数据和执行一个选择语句
eit6fx6z2#
显然,在sqllite 3上type_code返回为None是一个bug,请参阅链接了解更多细节。
bug Details
c8ib6hqw3#
这是一种方法,仍然使用原始代码中的
cursor.description
。1.创建一个函数以显示数据库中的所有记录
1.然后,在关闭正在使用的表/数据库的连接之前
1.然后,您可以在单独的文件中导入正在使用的
database
并执行函数wz3gfoph4#
在他们的answer中,用户VN'sCorner观察到元组的第二个元素-类型代码-
None
是一个bug。事实上,它被 * 报告 * 为bug,但作为另一个bug report的副本关闭,而另一个bug report又被Gerhard Häring关闭为“Won 't Fix”(链接):无法保证SQlite结果集中的所有列都具有相同的类型,这就是为什么我决定将类型代码设置为“undefined”。
SQLite的flexible typing是分辨率所指的,可以通过插入Python中的一些示例数据来演示:
并查看SQLite3 shell中的类型:
yhuiod9q5#
这就是为什么我只有一列
骗局就是我的联系。