导语
在银河麒麟 OS 中搭建 Python 虚拟环境,安装配置 UXDB 的 Python 驱动,并用 Python 程序顺利连接 UXDB 数据库,这曾是 DBA、Python 开发者的「拦路虎」。现在,只需跟随本文一步步操作,就能省下半天的踩坑时间,轻松通关。
1 部署环境
-
操作系统:银河麒麟桌面版 V10 SP1
-
CPU 架构:ARM64(aarch64)、x86_64
-
Python 环境:虚拟环境(venv 或 conda)
2 编译驱动程序,制作驱动文件
这一步是为了生成驱动需要的两类核心文件(.so 和 .py)。
2.1 编译前,请确认以下信息
-
Python 虚拟环境: /usr/local/web/venv/
-
驱动包名称 : pycouxdb(2.7-3.7).tar.gz
-
用哪个用户操作:uxdb 用户
-
UXDB 安装在哪里:/home/uxdb/uxdbinstall
2.2 使用 uxdb 用户编译
第 1 步:复制驱动包到服务器
# 把驱动包复制到指定目录,并修改属主为 uxdb
cp pycouxdb(2.7-3.7).tar.gz /home/uxdb/files/
chown uxdb:uxdb /home/uxdb/files/pycouxdb(2.7-3.7).tar.gz
第 2 步:解压
cd /home/uxdb/files
tar -zxvf pycouxdb(2.7-3.7).tar.gz
解压后会生成一个文件夹:uxdb-python-UX-UXSQL
第 3 步:编译
cd uxdb-python-UX-UXSQL
python setup.py build_ext --ux-config /home/uxdb/uxdbinstall/dbsql/bin/ux_config install
如果遇到下面这种错误:
ImportError: No module named setuptools
别慌,请按下面两步解决:
# 1. 激活虚拟环境
source /usr/local/web/venv/bin/activate
# 2. 安装 setuptools
pip install --upgrade setuptools
然后重新执行上面的编译命令。
第 4 步:编译完成后,你会得到两类驱动文件
-
.so文件:/home/uxdb/files/uxdb-python-UX-UXSQL/build/lib.linux-aarch64-cpython-38/pycouxdb/ -
.py文件:/home/uxdb/files/uxdb-python-UX-UXSQL/lib/
这两个文件就是我们要的驱动文件,根据不同的系统环境和版本选择不同的驱动(如:lib.linux-aarch64-cpython-38),请记住它们的位置。
3 配置运行环境(让 Python 能找到驱动)
3.1 把驱动文件放到虚拟环境中
# 1. 在虚拟环境中创建驱动文件夹(注意:python3.8 根据实际情况修改)
mkdir -p /usr/local/web/venv/lib/python3.8/site-packages/pycouxdb
# 2. 把文件夹的属主改为 uxdb
chown uxdb:uxdb /usr/local/web/venv/lib/python3.8/site-packages/pycouxdb
# 3. 把编译好的 .so 和 .py 文件复制进去
cp /home/uxdb/files/uxdb-python-UX-UXSQL/build/lib.linux-aarch64-cpython-38/pycouxdb/*.so /usr/local/web/venv/lib/python3.8/site-packages/pycouxdb/
cp /home/uxdb/files/uxdb-python-UX-UXSQL/lib/*.py /usr/local/web/venv/lib/python3.8/site-packages/pycouxdb/
3.2 配置环境变量,非常重要!
编辑当前用户的家目录下的 .bashrc 文件:
vi ~/.bashrc
在文件末尾添加以下两项配置:
# 告诉系统去哪里找 UXDB 的动态库
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/uxdb/uxdbinstall/dbsql/lib
export LD_LIBRARY_PATH
# 每次打开终端自动激活 Python 虚拟环境
source /usr/local/web/venv/bin/activate
保存退出后,使配置生效:
source ~/.bashrc
如果你想使 root 用户也能连接数据库,请用 root 用户登录,同样修改 /root/.bashrc,添加上面两项配置。
为什么要加这两行?
-
不加第一行 → 导入驱动时会报错:
libuxsql.so.5: cannot open shared object file -
不加第二行 → 每次打开终端都要手动执行
source /usr/local/web/venv/bin/activate
4、测试配置是否成功
前提:uxdb 用户和 root 用户都已经按上面配置好了。
第 1 步:创建测试脚本
新建一个文件 python_test.py,内容如下:
import pycouxdb
from pycouxdb import sql
# 连接数据库(请根据实际情况修改密码)
conn = pycouxdb.connect(
database="uxdb",
user="uxdb",
password="123456",
host="127.0.0.1",
port="52025"
)
# database:数据库名称
# user:数据库中的用户名称
# password:user 的密码
# host:数据库服务器(可以为:ip, localhost)
# port:数据库的端口号
cur = conn.cursor()
# 创建测试表
cur.execute("""
CREATE TABLE IF NOT EXISTS t1 (
id int PRIMARY KEY,
name VARCHAR(100) NOT NULL
);""")
# 插入数据
cur.execute("insert into t1(id, name) values(1, 'name001');");
cur.execute("insert into t1(id, name) values(2, 'name002');");
cur.execute("insert into t1(id, name) values(3, 'name003');");
conn.commit()
# 查询数据
cur.execute("select id, name from t1;")
rows = cur.fetchall()
colnames = [desc[0] for desc in cur.description]
print("列数:%d" % len(colnames))
print("列名:%s, %s" % (colnames[0], colnames[1]))
# 一次打印一条记录数据
for row in rows:
print(row)
cur.close()
conn.close()
第 2 步:运行测试
python python_test.py
如果整个过程没有报错,并且在 Python 中执行 import pycouxdb 成功,说明驱动已安装就绪!
5 小结
国产数据库 + 国产操作系统的组合正在成为越来越多企业的标配。通过本文,你已经打通了国产环境下 Python 连接 UXDB 的关键一环。