Python AttributeError:_在连接mysql数据库时输入
我在执行以下代码以获取连接和光标时,正在获取AttributeError:\uu\u输入\uuPython 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
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()
请更正解决方案中的相应行。