MySQL返回数据类型,python为不同的函数输出不同的类型

MySQL返回数据类型,python为不同的函数输出不同的类型,python,mysql,qt,pyqt,mysql-python,Python,Mysql,Qt,Pyqt,Mysql Python,我在MySQL返回和使用python将其输入Qt表时遇到了很多问题。我使用data=cursor.fetchall() 最初,我会在返回值周围放置str(),这适用于所有情况,但当我在外语和datetime方面遇到unicode问题时除外。所以现在我不把str()和外语插入放在表中。但是,现在非字符串存在一些问题 1) 我不能插入日期时间。当我执行type(data[i])操作时,它返回datetime,当我尝试使用data[i]=data[i]将其转换为字符串时。strftime(“%Y-%m

我在MySQL返回和使用python将其输入Qt表时遇到了很多问题。我使用
data=cursor.fetchall()

最初,我会在返回值周围放置str(),这适用于所有情况,但当我在外语和datetime方面遇到unicode问题时除外。所以现在我不把str()和外语插入放在表中。但是,现在非字符串存在一些问题

1) 我不能插入日期时间。当我执行
type(data[i])
操作时,它返回
datetime
,当我尝试使用
data[i]=data[i]将其转换为字符串时。strftime(“%Y-%m-%d%H:%m:%S”)
它告诉我
“tuple”对象不支持项分配

2) 所以我现在已经通过了。现在,我尝试获取要显示的整数。我知道

if data[i] == 1:
    print data[i]
    print type(data[i])
    data[i] = str(data[i])
这导致:

>>1
>>(type 'long')
>>Type Error: 'tuple' object does not support item assignment
另外,如果我尝试

print list(data[i])
它返回:

TypeError: 'long' object is not iterable
此外,

if data[i] is None:
    data[i] = 'No data'
sqlTableWidget.setItem(index,i,QtGui.QTableWidgetItem(data[i]))
返回:

QTableWidgetItem(QtableWidgetItem): argument 1 has unexpected type 'NoneType'

我一定是从根本上忽略了我的回报。原因是什么?

无法更改fetchall方法中的数据,因为它是元组而不是列表。 最简单的修复方法是:

data = [list(i) for i in cursor.fetchall()]

从您的错误日志中,我认为出现问题是因为python中的元组不支持赋值

您获取的返回值仅为就绪元组,因此直接在该元组上更改值是无效的

在代码中:

    data[i] = data[i].strftime("%Y-%m-%d %H:%M:%S")
是否要直接修改数据库中存储的原始数据?如果不是,您可以使用列表类型的另一个变量,如:

    my_list = data[i].strftime("%Y-%m-%d %H:%M:%S")
    // TODO MORE

否则,您可能会依赖update语句来重新定义数据库中的数据。

数据
在某种程度上是一个
元组
。您正在尝试更改元组元素的值,但您不能,因为
元组
是不可变的。那么,当我查询数据项和尝试将其转换为列表时,为什么它会告诉我类型是长的呢?
数据[i]
是一个
长的
数据
(保存
长的容器)是一个
元组
。但我不是询问类型(数据),我询问类型(数据[i]),它应该返回数据[i]的类型,数据不正确?当然,但这不是问题所在。问题出现在下一行,您尝试将字符串分配给
数据[i]
。由于
数据
是不可变的,因此它不支持项分配并引发错误。(更改
数据
中包含的元素就是更改
数据
)好的,更改了数据的返回类型,但里面的元素似乎仍然是元组,有没有办法让所有返回的元素都变成列表,就像递归设置一样?谢谢,这可以临时存储它,但是它不适用于我提出的类型不同的问题,例如,NoneType仍然不输入if语句,但在下一行出现错误。你知道这是什么吗?@user1938107我有点困惑,我猜你以前的问题是关于写入只读元组,那么这是否意味着你的问题现在改变了?对不起,我的母语不是英语。
    my_list = data[i].strftime("%Y-%m-%d %H:%M:%S")
    // TODO MORE