Python 来自mysql的数据类型
以下是我用Python编写的代码:Python 来自mysql的数据类型,python,mysql,Python,Mysql,以下是我用Python编写的代码: queryuniq = "SELECT COUNT(distinct src_ip), COUNT(distinct video_id)FROM video" cur.execute(queryuniq) uniq = [] uniq = cur.fetchall() print uniq ip = str(uniq[0]) video = str(uniq[1]) fd2.write("There are %d ip addresses and %d vid
queryuniq = "SELECT COUNT(distinct src_ip), COUNT(distinct video_id)FROM video"
cur.execute(queryuniq)
uniq = []
uniq = cur.fetchall()
print uniq
ip = str(uniq[0])
video = str(uniq[1])
fd2.write("There are %d ip addresses and %d video in total" %(int(ip), int(video)))
这是我得到的“uniq”变量的值:
((2052L, 163581L),)
以及此错误消息:
fd2.write("There are %d ip addresses in total" %(int(ip)))
ValueError: invalid literal for int() with base 10: '((2052L,),)'
video = str(uniq[1])
IndexError: tuple index out of range
我只想计算数据库中列中的不同项,并在文件中打印INT值
有人能解释一下为什么SELECT命令返回一种奇怪的数据格式,比如((2052L,163581L),)?不明白为什么数字后面有个“L”
我怎样才能解决这个问题?非常感谢 uniq是元组的元组(外部级别的每个条目表示一个数据库行,其中有一个列值元组) 您的查询总是返回一行。因此,外部元组始终包含一个元素,您可以通过替换以下内容来修复代码:
uniq = cur.fetchall()
与
此外,从int到string再到int的转换是不必要的
总而言之,以下是代码的整理版本:
queryuniq = "SELECT COUNT(distinct src_ip), COUNT(distinct video_id)FROM video"
cur.execute(queryuniq)
uniq = cur.fetchall()[0]
ip, video = uniq
fd2.write("There are %d ip addresses and %d video in total" %(ip, video))
uniq
是元组的元组(外部级别的每个条目表示一个数据库行,其中有一个列值元组)
您的查询总是返回一行。因此,外部元组始终包含一个元素,您可以通过替换以下内容来修复代码:
uniq = cur.fetchall()
与
此外,从int到string再到int的转换是不必要的
总而言之,以下是代码的整理版本:
queryuniq = "SELECT COUNT(distinct src_ip), COUNT(distinct video_id)FROM video"
cur.execute(queryuniq)
uniq = cur.fetchall()[0]
ip, video = uniq
fd2.write("There are %d ip addresses and %d video in total" %(ip, video))
您的代码有几处错误 首先,
cur.fetchall()
——顾名思义——从查询中获取所有结果。因为Python不知道查询只返回一行,所以它仍然返回所有行的元组。因此,uniq[0]
不引用行中的第一个字段,而是引用结果中的第一行
因为您知道您只需要一行,所以可以使用cur.fetchone()
其次,为什么要将结果转换为字符串,然后再将其转换回整数?这似乎毫无意义。它们的格式已经正确了-
L
只是表示它们是“长整数”。您的代码有几处错误
首先,cur.fetchall()
——顾名思义——从查询中获取所有结果。因为Python不知道查询只返回一行,所以它仍然返回所有行的元组。因此,uniq[0]
不引用行中的第一个字段,而是引用结果中的第一行
因为您知道您只需要一行,所以可以使用cur.fetchone()
其次,为什么要将结果转换为字符串,然后再将其转换回整数?这似乎毫无意义。它们的格式已经正确了-
L
只是表示它们是“长整数”。检查表中的数据,很可能它包含的是奇怪格式的数据?检查表中的数据,很可能它包含的是奇怪格式的数据?