2017-09-25 80 views
1

我有一个python代码,通过MySQLdb访问mysql来运行select语句。然后我用cursor.fetchall()来收集输出作为数组,但问题是它在每个输出像这样结束打印的L打印结果from cursor.fetchall()

sql = "SELECT data1, data2 FROM table1, table2 ;" 
cursor.execute(sql) 
dataarray = cursor.fetchall() 
print dataarray 

>>> ((75379L, 45708L), ...) 

但在我的表,没有L的,只是数字。我怎样才能确保它只是在没有L的情况下提取和打印数据?我宁愿避免在字符串上使用[:-1],因为它会将我的None值更改为Non

回答

1

L指示整数类型为long。在Python 2中,自动使用的值太大,无法用纯整数表示。

MySQLdb似乎只是总是返回long S:

虽然MySQL的INTEGER列完美地转换成一个Python 整数,无符号整数可能溢出,所以这些值转换 Python的长整数代替。

对这些值调用str()应忽略尾随'L'

+0

所以,如果我然后用这些值更新我的表,它会更新正确吗?因为在75379L将被输入到一个整数数据类型的列没有错误? –

+0

是的,'int'和'long'是可以互换的。顺便说一句,如果你打印一个单独的值,你不会看到尾随'L'。你看到它是因为你正在打印一个容器。 –

+0

我发现文档令人困惑。你真的可以溢出一个python int,但不是很长,有一些价值吗?我以为这种区分早在多年前就已经过去了? – roganjosh