python - Pyodbc Error unixODBC Driver Manager Data source name not found in CircleCI
问题描述
我使用 CircleCI 作为持续集成管道。当 CircleCI 运行构建时,它会启动一个包含 PostgreSQL 数据库的 Docker 容器,并执行一个尝试连接到数据库的 Python 脚本。Python 脚本失败并出现以下错误:
pyodbc.InterfaceError: ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)')
这是 Python 脚本:
import pyodbc
conn = 'driver={PostgreSQL Unicode};server=0.0.0.0;port=5432;database=data_quality;pwd=password;uid=postgres;'
connection = pyodbc.connect(conn)
print('Success')
CircleCI VM 中的文件/etc/odbcinst.ini包含以下配置:
[PostgreSQL ANSI]
Description = ODBC driver for PostgreSQL (ANSI version)
Driver = /usr/lib/x86_64-linux-gnu/odbc/psqlodbca.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcpsqlS.so
Debug = 0
CommLog = 1
[PostgreSQL Unicode]
Description = ODBC driver for PostgreSQL (Unicode version)
Driver = /usr/lib/x86_64-linux-gnu/odbc/psqlodbcw.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcpsqlS.so
Debug = 0
CommLog = 1
我很确定问题是由于 CircleCI 配置,但我不知道为什么。这是 CirclCI 配置文件.config.yml
# .circleci/config.yml
version: 2
jobs:
build:
machine: true
steps:
- checkout
- run:
name: Create Docker Compose configuration file
command: |
echo "POSTGRES_USER=postgres" >> ./.env
echo "POSTGRES_PASSWORD=password" >> ./.env
echo "DATABASE_URL=postgres://postgres:password@db:5432/data_quality" >> ./.env
- run:
name: Build Docker images
command: |
docker volume create data-quality-db-volume
docker-compose -f docker-compose.yml -f docker-compose.test.yml up db
docker ps -a
- run:
name: Install Unix ODBC
command: |
sudo apt-get update
sudo apt-get install -y g++ unixodbc-dev
- run:
name: Install PostgreSQL ODBC driver
command: |
sudo apt-get install -y odbc-postgresql
- run:
name: Move ODBC configuration file
command: |
sudo cp ./scripts/init/odbcinst.ini /etc
cat /etc/odbcinst.ini
- run:
name: Install Python environment
command: |
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.6
sudo apt-get install python3-pip
- run:
name: Install Python dependencies
command: |
sudo pip3 install --upgrade pip
sudo pip3 install pyodbc
sudo pip3 install nose2 --ignore-installed six
sudo pip3 list
- run:
name: Test Pyodbc connection to postgreSQL
command: |
echo 'export PYTHONPATH=./test:$PYTHONPATH' >> $BASH_ENV
source $BASH_ENV
nose2 --plugin nose2.plugins.junitxml --junit-xml -v
- store_artifacts:
path: test/junit/test-results.xml
destination: test-results
- store_test_results:
path: test
解决方案
推荐阅读
- mysql - 大量自定义分类 WordPress 冻结数据库和整个网站
- sql-server - 数据仓库或孤岛数据集市
- python - pygame.transform.flip 没有翻转也没有给我一个错误?
- linux - 导出到 Excel 时是否可以更改 HUE 使用的临时目录?
- python - Python - 数据帧分组并保存到每个组的文件
- c# - 如何在 AJAX 中接收从 ASP .NET 控制器发送的数组?
- javascript - Angular - 从服务发送请求比从组件发送请求更好?
- java - Spring Boot 1.5.20.RELEASE 上的 ErrorViewResolver 内无法重定向视图
- json - 如何将 json 内容写入 csv 文件?
- datatables - 如何将我的 BI 工具连接到 YouTube API (ODBC)?