我尝试使用以下方法连接到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)
我做错了什么?
答案 0 :(得分:4)
做的时候:
Sqllite_utilities.missing_ids(sys.argv[1])
您使用missing_ids
(字符串)调用sys.argv[1]
实例方法为self
(调用实例方法的功能方法,但使用了错误的对象),这解释了错误信息。
很明显,您必须先创建对象的实例才能使用实例方法(没有@staticmethod
或@classmethod
装饰器的方法):
if __name__ == '__main__':
s = Sqllite_utilities()
构造函数使用默认情况下使用argparse.ArgumentParser
的{{1}}来解析参数,所以将它放在一边,它就可以工作。
然后在实例上调用您的方法:
sys.argv
调用s.missing_ids()
时, s
隐式传递为self
答案 1 :(得分:1)
根据此问题的最佳答案建议:unbound method f() must be called with fibo_ instance as first argument (got classobj instance instead)
添加到您的代码:
if __name__ == '__main__':
obj = Sqllite_utilities()
s.missing_ids()