2017-03-14 15 views
-1

私が使用してsqlliteデータベースに接続しようとしている

class Sqllite_utilities(object): 

    def __init__(self): 

     parser = argparse.ArgumentParser() 
     parser.add_argument("-s","--source", type=str, 
          help="source table from db") 
     args = parser.parse_args() 
     print(args) 


     source_table= args.source 

     db_path = "sqlite:///"+settings.SETTINGS_PATH+"\\data.db" 

     dataset_db = dataset.connect(db_path) 
     self.dataset_table = dataset_db[source_table] 


    def missing_ids(self): 

     for user in self.dataset_table: 
      print(user['id']) 


if __name__ == '__main__': 
    Sqllite_utilities.missing_ids(sys.argv[1]) 

私が行うと:

$ python find_missing_records.py -s test 

は私が手:

Traceback (most recent call last): 
    File "find_missing_records.py", line 41, in <module> 
    Sqllite_utilities.missing_ids(sys.argv[1]) 
TypeError: unbound method missing_ids() must be called with Sqllite_utilities instance as first argument (got str instance instead) 
(contact2E) 

私は何が間違っていますか?

答えて

4

やって:

Sqllite_utilities.missing_ids(sys.argv[1]) 

を使用すると、エラーメッセージを説明しselfとしてsys.argv[1](文字列)(インスタンスメソッドを呼び出すための機能的な方法が、間違ったオブジェクトと)、とmissing_idsインスタンスメソッドを呼んでいます。使用して、コンストラクタは引数を解析し

if __name__ == '__main__': 
    s = Sqllite_utilities() 

それはあなたが(@staticmethodまたは@classmethodデコレータなしのもの)インスタンスメソッドを使用できるようになる前に、あなたのオブジェクトのインスタンスを作成する必要があることは明らかですargparse.ArgumentParserはデフォルトでsys.argvを使用していますので、そのままにしておくと動作します。

次にインスタンス上で、あなたのメソッドを呼び出します。この質問への一番上の回答から示唆されているようにmissing_ids

+0

ありがとうございます。 「インスタンスメソッド(staticメソッドまたはclassmethodデコレータのないインスタンス)を使用できるようになる前に、オブジェクトのインスタンスを作成する必要があることは明らかです」と、クラスと静的メソッドでクラスを必要としないと言っていますか最初にインスタンス化されますが、他のメソッドはどうしますか? – user61629

+0

はい、インスタンスなしでクラス/静的メソッドを使用できます。 –

+0

ありがとう、それは私の理解に役立ちます。 – user61629

関連する問題