无法在对象范围内调用Python类属性

时间:2017-04-06 08:22:42

标签: python

import pyodbc

class Database(object):

    def connect(self):
        connection = pyodbc.connect("""DRIVER={SQL Server};
                                       SERVER=XX\SQLEXPRESS;
                                       DATABASE=ACCOUNT_DBF;
                                       UID=sa;PWD=XXX""")
        cursor = connection.cursor()

    def check_account(self, usr):
        cursor.execute("SELECT * FROM ACCOUNT_TBL WHERE account = ?", usr)
        row = cursor.fetchone()

        print(row[0])

database = Database()
database.check_account("developer")

所以,你可以看到我试图用“developer”参数调用“check_account”函数。但每当我执行/构建它时,它都会给我一个错误

  

“NameError:未定义名称游标”

对于如何实际操作,我很好奇并且对python不熟悉。我一直在网上搜索,但我找不到我的问题的具体答案。

*我正在使用最新的python btw(3.6.1)。

2 个答案:

答案 0 :(得分:2)

触发NameError异常,因为在check_account方法中,您无法看到connect方法中定义的局部变量。

您需要设置实例属性" inside" self,因为您可以从所有方法访问self(它是实例本身)。

def connect(self):
    self.connection = pyodbc.connect("""DRIVER={SQL Server};
                                   SERVER=XX\SQLEXPRESS;
                                   DATABASE=ACCOUNT_DBF;
                                   UID=sa;PWD=XXX""")
    self.cursor = connection.cursor()

def check_account(self, usr):
    self.cursor.execute("SELECT * FROM ACCOUNT_TBL WHERE account = ?", usr)
    row = self.cursor.fetchone()

    print(row[0])

答案 1 :(得分:0)

尝试:

class Database(object):

def connect(self):
    connection = pyodbc.connect("""DRIVER={SQL Server};
                                   SERVER=XX\SQLEXPRESS;
                                   DATABASE=ACCOUNT_DBF;
                                   UID=sa;PWD=XXX""")
    self.cursor = connection.cursor()

在你的代码中,cursor是变量,下面是方法,只有self.cursor可以将光标存储到类中,然后其他方法可以使用。