2017-09-23 65 views
1

查询结果和下面的预期输出。如何使用python返回mysql查询结果

+------+----------+ 
| YEAR | MAX_TEMP | 
+------+----------+ 
| 1990 |  603 | 
| 1991 |  605 | 
+------+----------+ 

这是我的代码。在没有记录的输出中(即2)。我怎样才能让它显示整个表格?

import MySQLdb 

    conn = MySQLdb.connect("localhost","root","root","vkp") 
    cursor = conn.cursor() 
    print ("Opened database successfully"); 

    def select(): 
     #database_conn() 
     print ("inside select") 
     a = cursor.execute("SELECT year(dt) AS YEAR, max(air_temp) AS MAX_TEMP from TEMP_DATA WHERE air_temp != 9999 AND (quality_at = '0' || quality_at = '1' || quality_at = '4' || quality_at = '5' || quality_at = '9') GROUP BY year(dt); SELECT year(dt) AS YEAR, max(air_temp) AS MAX_TEMP from MAX_TEMP9293 WHERE air_temp != 9999 AND (quality_at = '0' || quality_at = '1' || quality_at = '4' || quality_at = '5' || quality_at = '9') GROUP BY year(dt)") 

     return a 
     conn.commit() 
     conn.close 
    a = select() 
    print (a) 
+2

'返回'看起来像是在这里的错误的地方。 – tadman

+0

也不完全确定它到底返回给你什么? –

+0

编辑我的代码..即时获取'2'作为输出 – Varun

回答

1

你错过fetchall

所有你正在做的是返回结果的数量,而不是实际的结果本身。

更改此:

a = cursor.execute("SELECT year(dt) AS YEAR, max(air_temp) AS MAX_TEMP from TEMP_DATA WHERE air_temp != 9999 AND (quality_at = '0' || quality_at = '1' || quality_at = '4' || quality_at = '5' || quality_at = '9') GROUP BY year(dt); SELECT year(dt) AS YEAR, max(air_temp) AS MAX_TEMP from MAX_TEMP9293 WHERE air_temp != 9999 AND (quality_at = '0' || quality_at = '1' || quality_at = '4' || quality_at = '5' || quality_at = '9') GROUP BY year(dt)") 

要这样:

cursor.execute("SELECT year(dt) AS YEAR, max(air_temp) AS MAX_TEMP from TEMP_DATA WHERE air_temp != 9999 AND (quality_at = '0' || quality_at = '1' || quality_at = '4' || quality_at = '5' || quality_at = '9') GROUP BY year(dt); SELECT year(dt) AS YEAR, max(air_temp) AS MAX_TEMP from MAX_TEMP9293 WHERE air_temp != 9999 AND (quality_at = '0' || quality_at = '1' || quality_at = '4' || quality_at = '5' || quality_at = '9') GROUP BY year(dt)") 

a = cursor.fetchall() 

还没有为commit存在的点。您不会修改此函数中实际表格中的任何数据,这是它的目的。

+0

我得到这个错误 AttributeError:'int'对象没有属性'fetchall' – Varun

+0

好吧我猜需要做光标上的fetchall()。 cusror.fetchall() – Varun

+0

编辑,这是我的错误 –

0
  1. 代码中的缩进关闭;按照书面形式,您的代码不会编译(您可能需要更正提交问题时的格式)。
  2. @aws_apprentice是正确的。您应该在代码中包含fetchall。我会写这样的:

    import MySQLdb 
    
    conn = MySQLdb.connect("localhost","root","root","vkp") 
    curs = conn.cursor() 
    print ("Opened database successfully"); 
    
    def select(): 
        #database_conn() 
        print ("inside select") 
        curs.execute(""" 
         SELECT year(dt) AS YEAR, max(air_temp) AS MAX_TEMP 
         FROM TEMP_DATA 
         WHERE air_temp != 9999 
         AND (quality_at = '0' || quality_at = '1' || quality_at = '4' || quality_at = '5' || quality_at = '9') 
         GROUP BY year(dt); 
         SELECT year(dt) AS YEAR, max(air_temp) AS MAX_TEMP 
         FROM MAX_TEMP9293 
         WHERE air_temp != 9999 
         AND (quality_at = '0' || quality_at = '1' || quality_at = '4' || quality_at = '5' || quality_at = '9') 
         GROUP BY year(dt) 
         """ 
         ) 
    
        result = curs.fetchall() 
    
        return result 
    
    a = select() 
    conn.close() 
    print(a) 
    
  3. 我不是100%肯定,但我不认为MySQLdb的将漂亮的打印输出,你表示你希望它,因为这个代码写。图书馆可能有一些方法可以做到这一点;可能值得进一步研究。上面的代码将输出包含您的数据的元组列表(我认为;未经测试)。

+0

谢谢Daniel,这段代码给出了行数(2)而不是实际的行数据。所以我用索引来获取行数据。 max = cursor.fetchall() #打印max(0 [0]) print(max [1]) – Varun

+0

好@Varun!很高兴你能解决它 – Daniel

0

我设法得到输出,这是代码被使用。

databasename = 'vkp' 
host = 'localhost' 
user = 'root' 
password = 'root' 

#mysql connection 
conn = MySQLdb.connect(host,user,password,databasename) 
cursor = conn.cursor() 

#defining sql select statements 
print ("Opened database successfully"); 
sql = "SELECT year(dt) AS YEAR, max(air_temp) AS MAX_TEMP from TEMP_DATA WHERE air_temp != 9999 GROUP BY year(dt)" 
sql1 = "SELECT year(dt) AS YEAR, max(air_temp) AS MAX_TEMP from MAX_TEMP9293 WHERE air_temp != 9999 GROUP BY year(dt)" 
#list for storing sql queries 
list = [sql,sql1] 

#function for executing select statements 
def select(): 
    #iterating for loop 
    for l in list: 
     #executing query 
     cursor.execute(l) 
     max = cursor.fetchall() 
     #printing max temp for years 
     print(max[0]) 
     print(max[1]) 
相关问题