Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何解决这个问题;TypeError:read()缺少1个必需的位置参数:';自我'&引用;_Python 3.x_Rest_Flask - Fatal编程技术网

Python 3.x 如何解决这个问题;TypeError:read()缺少1个必需的位置参数:';自我'&引用;

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,

我正在使用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, 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中的一个变量。您可以使用全局变量或创建服务对象,并从中获取数据。