AttributeError: module 'odbc' has no attribute 'connect' - python with pydev
AttributeError: module 'odbc' has no attribute 'connect' - python with pydev
我是 python 的新手,我似乎找不到这个错误的答案。当我 运行 下面的代码出现错误时
AttributeError: module 'odbc' has no attribute 'connect'
但是,这个错误只出现在eclipse中。如果我通过命令行 运行 没有问题。我是 运行宁 python 3.5。我究竟做错了什么?
try:
import pyodbc
except ImportError:
import odbc as pyodbc
# Specifying the ODBC driver, server name, database, etc. directly
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=PXLstr,17;DATABASE=Dept_MR;UID=guest;PWD=password')
删除 try...except 块的建议对我不起作用。现在实际导入会抛出如下错误:
Traceback (most recent call last):
File "C:\Users\a\workspace\TestPyProject\src\helloworld.py", line 2, in <module>
import pyodbc
File "C:\Users\a\AppData\Local\Continuum\Anaconda3\Lib\site-packages\sqlalchemy\dialects\mssql\pyodbc.py", line 105, in <module>
from .base import MSExecutionContext, MSDialect, VARBINARY
我确实安装了 pyodbc,导入和连接在 windows 上的命令行工作正常。
谢谢
这里的问题是 pyodbc
模块没有在您的 try
/ except
块中导入。我强烈建议不要将 import 语句放在 try
块中。首先,您需要确保安装了 pyodbc
(pip install pyodbc
),最好是 virtualenv
,然后您可以这样做:
import pyodbc
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=PXLstr,17;DATABASE=Dept_MR;UID=guest;PWD=password')
cursor = cnxn.cursor()
cursor.execute('SELECT 1')
for row in cursor.fetchall():
print(row)
如果您在 Windows 上 运行(看起来是这样,给定 DRIVER=
参数),请查看 virtualenvwrapper-win
以管理 Windows Python 虚拟环境:https://pypi.python.org/pypi/virtualenvwrapper-win
祝你好运!
Flipper 的回答有助于确定问题出在 eclipse 的外部库列表中引用了错误的库。修好后,问题就解决了。
您的 python 文件的名称是什么?如果您无意中将其命名为 'pyodbc.py',则会出现该错误。因为它试图导入自己而不是预期的 pyodbc 模块。
解决方法在这里!
只需安装并使用 'pypyodbc' 而不是 'pyodbc'!
我有如下测试示例。更改 SERVER_NAME 和 DATA_NAME 和 DRIVER 的数据。也放上自己的records.good运气!
import sys
import pypyodbc as odbc
records = [
['x', 'Movie', '2020-01-09', 2020],
['y', 'TV Show', None, 2019]
]
DRIVER = 'ODBC Driver 11 for SQL Server'
SERVER_NAME = '(LocalDB)\MSSQLLocalDB'
DATABASE_NAME = 'D:\ASPNET\SHOJA.IR\SHOJA.IR\APP_DATA\DATABASE3.MDF'
conn_string = f"""
Driver={{{DRIVER}}};
Server={SERVER_NAME};
Database={DATABASE_NAME};
Trust_Connection=yes;
"""
try:
conn = odbc.connect(conn_string)
except Exception as e:
print(e)
print('task is terminated')
sys.exit()
else:
cursor = conn.cursor()
insert_statement = """
INSERT INTO NetflixMovies
VALUES (?, ?, ?, ?)
"""
try:
for record in records:
print(record)
cursor.execute(insert_statement, record)
except Exception as e:
cursor.rollback()
print(e.value)
print('transaction rolled back')
else:
print('records inserted successfully')
cursor.commit()
cursor.close()
finally:
if conn.connected == 1:
print('connection closed')
conn.close()
我是 python 的新手,我似乎找不到这个错误的答案。当我 运行 下面的代码出现错误时
AttributeError: module 'odbc' has no attribute 'connect'
但是,这个错误只出现在eclipse中。如果我通过命令行 运行 没有问题。我是 运行宁 python 3.5。我究竟做错了什么?
try:
import pyodbc
except ImportError:
import odbc as pyodbc
# Specifying the ODBC driver, server name, database, etc. directly
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=PXLstr,17;DATABASE=Dept_MR;UID=guest;PWD=password')
删除 try...except 块的建议对我不起作用。现在实际导入会抛出如下错误:
Traceback (most recent call last):
File "C:\Users\a\workspace\TestPyProject\src\helloworld.py", line 2, in <module>
import pyodbc
File "C:\Users\a\AppData\Local\Continuum\Anaconda3\Lib\site-packages\sqlalchemy\dialects\mssql\pyodbc.py", line 105, in <module>
from .base import MSExecutionContext, MSDialect, VARBINARY
我确实安装了 pyodbc,导入和连接在 windows 上的命令行工作正常。
谢谢
这里的问题是 pyodbc
模块没有在您的 try
/ except
块中导入。我强烈建议不要将 import 语句放在 try
块中。首先,您需要确保安装了 pyodbc
(pip install pyodbc
),最好是 virtualenv
,然后您可以这样做:
import pyodbc
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=PXLstr,17;DATABASE=Dept_MR;UID=guest;PWD=password')
cursor = cnxn.cursor()
cursor.execute('SELECT 1')
for row in cursor.fetchall():
print(row)
如果您在 Windows 上 运行(看起来是这样,给定 DRIVER=
参数),请查看 virtualenvwrapper-win
以管理 Windows Python 虚拟环境:https://pypi.python.org/pypi/virtualenvwrapper-win
祝你好运!
Flipper 的回答有助于确定问题出在 eclipse 的外部库列表中引用了错误的库。修好后,问题就解决了。
您的 python 文件的名称是什么?如果您无意中将其命名为 'pyodbc.py',则会出现该错误。因为它试图导入自己而不是预期的 pyodbc 模块。
解决方法在这里! 只需安装并使用 'pypyodbc' 而不是 'pyodbc'! 我有如下测试示例。更改 SERVER_NAME 和 DATA_NAME 和 DRIVER 的数据。也放上自己的records.good运气!
import sys
import pypyodbc as odbc
records = [
['x', 'Movie', '2020-01-09', 2020],
['y', 'TV Show', None, 2019]
]
DRIVER = 'ODBC Driver 11 for SQL Server'
SERVER_NAME = '(LocalDB)\MSSQLLocalDB'
DATABASE_NAME = 'D:\ASPNET\SHOJA.IR\SHOJA.IR\APP_DATA\DATABASE3.MDF'
conn_string = f"""
Driver={{{DRIVER}}};
Server={SERVER_NAME};
Database={DATABASE_NAME};
Trust_Connection=yes;
"""
try:
conn = odbc.connect(conn_string)
except Exception as e:
print(e)
print('task is terminated')
sys.exit()
else:
cursor = conn.cursor()
insert_statement = """
INSERT INTO NetflixMovies
VALUES (?, ?, ?, ?)
"""
try:
for record in records:
print(record)
cursor.execute(insert_statement, record)
except Exception as e:
cursor.rollback()
print(e.value)
print('transaction rolled back')
else:
print('records inserted successfully')
cursor.commit()
cursor.close()
finally:
if conn.connected == 1:
print('connection closed')
conn.close()