-1

私はPythonを初めて使用し、.getRowメソッドが実行されない理由を理解できないようです。dbMain.pyにDBMainクラスを作成し、pyTest.pyを使用してgetRowを実行するDBMainオブジェクトを作成しています。Eclipseでデバッガーを実行すると、DBMainのコンストラクターは実行されますが、getRowメソッドが呼び出されると、何も起こりません。

pyTest.py

import dbMain

def main():
    db = dbMain.DbMain()
    db.getRow()

if __name__ == '__main__':
    main()

dbMain.py

#@PydevCodeAnalysisIgnore
import pyodbc
class DbMain(object):
    cncx = ''
    def __init__(self):
        cnxn = pyodbc.connect(driver='{SQL Server}', 
                              server='server', 
                              database='database', 
                              uid='name', 
                              pwd='pwd')

    def getRow(): 
        cursor = cnxn.cursor()
        cursor.execute("select user_id, user_name from users")
        row = cursor.fetchone()
        return row
4

1 に答える 1

1
  1. から何も返しませんgetRow。多分あなたは次のようなものを含めたいでしょう

    ...
    return row
    
  2. getRow()メソッドはクラスにバインドされていません。インスタンスメソッドのシグネチャは次のようgetRow(self)になります。最初のパラメータはインスタンスであり、明示的に受信されます(ただし、を呼び出すと暗黙的に渡されますsomeinstance.method())。

何かを機能させるには、dbMainを次のように変更する必要があります。

#@PydevCodeAnalysisIgnore
import pyodbc
class DbMain(object):
    def __init__(self):
        # make cnxn an attribute of the instance
        self.cnxn = pyodbc.connect(driver='{SQL Server}', server='server', 
            database='database', uid='name', pwd='pwd')

    # receive `self` explicitly
    def getRow(self): 
        cursor = self.cnxn.cursor()
        cursor.execute("select user_id, user_name from users")
        row = cursor.fetchone()
        # actually return something
        return row

参考文献:

于 2012-10-05T18:47:11.663 に答える