Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.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 AttributeError:_在连接mysql数据库时输入_Python_Python 3.x - Fatal编程技术网

Python AttributeError:_在连接mysql数据库时输入

Python AttributeError:_在连接mysql数据库时输入,python,python-3.x,Python,Python 3.x,我在执行以下代码以获取连接和光标时,正在获取AttributeError:\uu\u输入\uu from contextlib import closing def _connect(): return closing(mysql.connect( host=settings.DATABASES['data_base_name'].get('HOST', 'localhost'), user=settings.DATABASES['data_base_na

我在执行以下代码以获取连接和光标时,正在获取AttributeError:\uu\u输入\uu

from contextlib import closing
def _connect():
    return closing(mysql.connect(
        host=settings.DATABASES['data_base_name'].get('HOST', 'localhost'),
        user=settings.DATABASES['data_base_name']['USER'],
        passwd=settings.DATABASES['data_base_name'].get('PASSWORD', ''),
        db=settings.DATABASES['data_base_name']['NAME'],
        cursorclass=cursors.DictCursor))

with _connect() as conn, conn as cursor:
我在执行过程中出现以下错误

with _connect() as conn, conn as cursor:
 AttributeError: __enter__

我已经用ContextDecorator解决了我的问题,如下所示

from contextlib import ContextDecorator

class my_connect(ContextDecorator):
    def __init__(self):
        self.data_base_connection = ''

    def __enter__(self):
        self.data_base_connection = mysql.connect(
        host=settings.DATABASES['data_base_name'].get('HOST', 'localhost'),
        user=settings.DATABASES['data_base_name']['USER'],
        passwd=settings.DATABASES['data_base_name'].get('PASSWORD', ''),
        db=settings.DATABASES['data_base_name']['NAME'],
        cursorclass=cursors.DictCursor)
        cursor = self.data_base_connection.cursor()
        return cursor

    def __exit__(self, *exc):
        self.data_base_connection.close()
        return False
在query_tables()中,我只需使用关键字调用我的_connect()

def query_tables():
    with my_connect() as cursor:
        #rest of the statements

您也可以通过这种方式使用初始方法来完成。您不需要创建类。在内部,它将通过创建一个类来完成您已经完成的工作,但是代码更简洁

from contextlib import contextmanager

@contextmanager
def _connect():
    data_base_connection = mysql.connect(
    host=settings.DATABASES['data_base_name'].get('HOST', 'localhost'),
    user=settings.DATABASES['data_base_name']['USER'],
    passwd=settings.DATABASES['data_base_name'].get('PASSWORD', ''),
    db=settings.DATABASES['data_base_name']['NAME'],
    cursorclass=cursors.DictCursor)
    try:
       yield data_base_connection
    finally:
        data_base_connection.close()

def query_tables():
    with _connect() as conn:
        cursor = conn.cursor()
        # rest of the statements

是的,我已经这样写了,作为连接符,CONN作为游标:但是它不起作用。@ Sasivaa,你希望代码> CONN作为光标< /代码>做什么???@ BrooDeSthuiRiver当然我用光标执行Quices……然后考虑接受你自己的答案。这将使其他人更容易找到。
cursor=self.data\u base\u name.cursor()
将返回一个错误
data\u base\u name.cursor()没有方法cursor()
。我想您的意思是
cursor=self.data\u base\u connection.cursor()
请更正解决方案中的相应行。