Python 3.x 如何解决这个问题;TypeError:read()缺少1个必需的位置参数:';自我'&引用;
我正在使用Flask创建一个RESTAPI,以获取存储在MSSQL数据库中的所有书籍。当我在控制台中运行这段代码并打印数据时,它工作得很好。但当我作为Flask API运行并尝试在postman中获取所有数据时,它显示了以下错误: 完全追溯:Python 3.x 如何解决这个问题;TypeError:read()缺少1个必需的位置参数:';自我'&引用;,python-3.x,rest,flask,Python 3.x,Rest,Flask,我正在使用Flask创建一个RESTAPI,以获取存储在MSSQL数据库中的所有书籍。当我在控制台中运行这段代码并打印数据时,它工作得很好。但当我作为Flask API运行并尝试在postman中获取所有数据时,它显示了以下错误: 完全追溯: Traceback (most recent call last): File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\app.py", line 2309,
Traceback (most recent call last):
File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\app.py", line 2309, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\app.py", line 2295, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\app.py", line 1741, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\_compat.py", line 35, in reraise
raise value
File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\_compat.py", line 35, in reraise
raise value
File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
TypeError: read() missing 1 required positional argument: 'self'
127.0.0.1 - - [13/Feb/2019 17:38:21] "GET / HTTP/1.1" 500 -
Traceback (most recent call last):
File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\app.py", line 2309, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\app.py", line 2295, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\app.py", line 1741, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\_compat.py", line 35, in reraise
raise value
File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\_compat.py", line 35, in reraise
raise value
File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\raj.pandey\Desktop\Flask_API\lib\site-packages\flask\app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
TypeError: home() missing 1 required positional argument: 'self'
以下是我遇到错误的代码:
class MssqlConnection:
def __init__(self):
credentials = Credentials()
self.driver = credentials.driver
self.host = credentials.host
self.database = credentials.database
self.table = credentials.table
self.user = credentials.user
self.password = credentials.password
@app.route('/books')
def read(self):
query = "Select id, name, price, isbn from dbo." + self.table
cursor.execute(query)
for row in cursor:
data = {
'id': row.id,
'name': row.name,
'price': row.price,
'isbn': row.isbn
}
# print(data)
return jsonify(data)
我已经检查过了,但仍然无法理解问题所在。您的端点函数可能不在(甚至不应该)类中。只需从
def read(self):
行中删除self
参数,就可以了。在类作用域中编写代码时,应该使用“self”作为参数。您不在类范围内。因此,解决方案是def read():
在Flask中,仅当您在url中放入一个参数,如app.route('/books/')
时,才应将somevariable
作为参数传递给端点函数,并写入def myfunction(somevariable):
您可以阅读以下文档:
您能添加完整的回溯吗?是的,当然,请稍等片刻为什么要将“self”参数传递给
def read()
?这与home()
…self.table相同。在初始化后的类中,每个def都会获得self。没有它,我就无法访问“self.variable”,先生,你能把你的邮件id发给我吗?因为我不能在这里放那么多代码?因此,我将向您发送我的代码。通过从read()
方法中删除self
,类变量表
将不再可访问。Joey sir是对的,def read位于类作用域中,我没有在这里放置完整的代码,因为它非常长。但是flask认为“self”是url中的一个变量。您可以使用全局变量或创建服务对象,并从中获取数据。