使用pyodbc导入CSV至Amazon RDS SQL Server时遇驱动错误求助
解决pyodbc连接Amazon RDS SQL Server时的驱动找不到问题
你遇到的错误Can't open lib 'SQL Server' : file not found是因为macOS系统默认没有安装适用于SQL Server的ODBC驱动,而且你连接字符串里指定的驱动名称在macOS环境下并不存在。下面是具体的解决步骤:
1. 安装Microsoft ODBC驱动(macOS)
最便捷的方式是通过Homebrew安装:
# 添加Microsoft的brew仓库 brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release # 接受许可协议并安装ODBC驱动及配套工具 ACCEPT_EULA=Y brew install msodbcsql18 mssql-tools18
如果还没安装Homebrew,先完成Homebrew的安装后再执行上述命令即可。
2. 修改连接字符串的驱动名称
macOS上安装的ODBC驱动名称不是{SQL Server},而是对应版本的标识(比如你安装的是18版本,就用{ODBC Driver 18 for SQL Server})。另外,连接RDS时需要加上TrustServerCertificate=yes参数,避免SSL证书验证失败的问题。修改后的连接代码如下:
server = 'xxx.xyxy.xxx.rds.amazonaws.com' database = 'database' username = 'username' password = 'admin' # 修正驱动名称并添加SSL信任参数 cnxn = pyodbc.connect( 'DRIVER={ODBC Driver 18 for SQL Server};' f'SERVER={server};' f'DATABASE={database};' f'UID={username};' f'PWD={password};' 'TrustServerCertificate=yes' )
3. 优化数据插入方式(可选但推荐)
你当前用itertuples循环插入的方式效率较低,推荐使用pandas自带的to_sql方法,代码更简洁且性能更优:
# 确保表已创建(若需自动创建可将if_exists设为'replace',但需注意字段类型匹配) df.to_sql( name='stocks', con=cnxn, schema='dbo', if_exists='append', # 表存在则追加数据,replace会重建表 index=False, dtype={ 'Date': 'datetime', 'Close': 'float', 'Volume': 'float', 'Open': 'float', 'High': 'float', 'Low': 'float', 'stockSymbol': 'nvarchar(50)', 'stock_description_id': 'int', 'sector': 'nvarchar(80)', 'industry': 'nvarchar(80)', 'one_year_target': 'float', 'exchange': 'nvarchar(20)', 'percentageChange': 'float', 'priceChange': 'float' } )
额外检查项
- 确认你的Amazon RDS安全组已开放1433端口(SQL Server默认端口)给你的本地IP地址,否则会出现连接超时问题
- 确认你的数据库账号拥有
CREATE TABLE和INSERT的操作权限
内容的提问来源于stack exchange,提问作者William Adriel
相关产品推荐
相关产品推荐

