2016-09-07 115 views
0

我想從SQL中的特定行然後選擇列。 我想找到一個特定的user_name行,然後從行中選擇access_id。沒有得到預期的結果從sql查詢選擇python

這是我的所有代碼。

import sys, ConfigParser, numpy 
import MySQLdb as mdb 
from plaid.utils import json 

class SQLConnection: 
    """Used to connect to a SQL database and send queries to it""" 
    config_file = 'db.cfg' 
    section_name = 'Database Details' 

_db_name = '' 
_hostname = '' 
_ip_address = '' 
_username = '' 
_password = '' 

def __init__(self): 
    config = ConfigParser.RawConfigParser() 
    config.read(self.config_file) 
    print "making" 

    try: 
     _db_name = config.get(self.section_name, 'db_name') 
     _hostname = config.get(self.section_name, 'hostname') 
     _ip_address = config.get(self.section_name, 'ip_address') 
     _user = config.get(self.section_name, 'user') 
     _password = config.get(self.section_name, 'password') 
    except ConfigParser.NoOptionError as e: 
     print ('one of the options in the config file has no value\n{0}: ' + 
      '{1}').format(e.errno, e.strerror) 
     sys.exit() 


    self.con = mdb.connect(_hostname, _user, _password, _db_name) 
    self.con.autocommit(False) 
    self.con.ping(True) 

    self.cur = self.con.cursor(mdb.cursors.DictCursor) 


def query(self, sql_query, values=None): 
     """ 
     take in 1 or more query strings and perform a transaction 
     @param sql_query: either a single string or an array of strings 
      representing individual queries 
     @param values: either a single json object or an array of json objects 
      representing quoted values to insert into the relative query 
      (values and sql_query indexes must line up) 
     """ 
     # TODO check sql_query and values to see if they are lists 
     # if sql_query is a string 
     if isinstance(sql_query, basestring): 
      self.cur.execute(sql_query, values) 
      self.con.commit() 
     # otherwise sql_query should be a list of strings 
     else: 
      # execute each query with relative values 
      for query, sub_values in zip(sql_query, values): 
       self.cur.execute(query, sub_values) 
      # commit all these queries 
      self.con.commit 
     return self.cur.fetchall 


def get_plaid_token(self,username): 
     result= self.query("SELECT access_id FROM `users` WHERE `user_name` LIKE %s",[username]) 
     print type (result) 
     return result 


print SQLConnection().get_plaid_token("test") 

我希望得到的事務ID,但由於某種原因, 「結果」 返回

> <bound method DictCursor.fetchall of <MySQLdb.cursors.DictCursor 
> object at 0x000000000396F278>> 

結果也是類型"instancemethod"

+0

autocommit和ping會做什麼? – slopeofhope

回答

2

嘗試改變這一行:

return self.cur.fetchall 

return self.cur.fetchall() 

沒有方法名稱後括號,你是返回到該方法本身,而不是在運行方法的參考。

+0

哈哈它的工作。謝謝!! –

+0

@gordonLinoff我會接受答案。然而,我必須等待10分鐘纔可以。 –