mysqlclient 连接 seekdb 示例程序
本文将介绍如何使用 mysqlclient 和 seekdb 构建一个应用程序,实现创建表、插入数据和查询数据等基本操作。
前提条件
- 您已安装 Python 3.x 和 pip。
- 您已安装 seekdb。
操作步骤
- 检查 Python 和 pip 的版本。
- 安装 mysqlclient 库。
- 获取 seekdb 连接信息。
- 修改
config.py文件中的数据库连接信息。 - 运行
main.py文件。 - 在交互式命令行界面进行相应的操作。
步骤一:检查 Python 和 pip 的版本
打开命令提示符或 PowerShell 终端,运行 python --version 和 pip --version 命令,确保 Python 和 pip 正常安装。
示例如下:
PS C:\Windows\system32> python --version
Python 3.11.2
PS C:\Windows\system32> pip --version
pip 23.3.1 from C:\Users\xxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\pip (python 3.11)
步骤二:安装 mysqlclient 库
mysqlclient 是一个基于 C 语言实现的 MySQL 客户端库,性能较高,适合对性能要求较高的场景。安装 mysqlclient 库时,需要编译和链接 MySQL C API 来连接 seekdb。
Windows 环境
方法一:使用预编译的二进制文件安装(推荐)
-
从 Download files 下载与您的 Python 版本和操作系统平台兼容的
whl文件。 -
打开命令提示符或 PowerShell 终端,进入到存放
whl文件的目录,运行以下命令安装:pip install mysqlclient-2.2.0-cp311-cp311-win_amd64.whl
方法二:直接安装
-
安装 MySQL 或 MySQL Connector/C,确保安装了开发组件。
-
安装 C 编译器(如 Visual Studio 或 MinGW)。
-
运行以下命令安装 mysqlclient 库:
pip install mysqlclient
Linux 环境
-
安装 Python 开发包:
sudo yum install python3-devel -
安装 MySQL 开发库:
sudo yum install mysql-devel -
运行以下命令安装 mysqlclient 库:
sudo pip install mysqlclient
mysqlclient 是一个高性能的 MySQL 客户端库,适合对性能要求较高的生产环境应用。
步骤三:获取 seekdb 连接信息
联系 seekdb 部署人员或者管理员获取相应的数据库连接串。
mysql -h$host -P$port -u$user_name -p$password -D$database_name
参数说明:
$host:提供 seekdb 的连接 IP。应该被实际的 IP 替换,也可以使用本地 IP 及 127.0.0.1。$port:提供 seekdb 接端口。应该被实际的端口替换,默认是 2881,在部署 seekdb 时可自定义。$database_name:需要访问的数据库名称。$user_name:提供连接账户。格式:用户名。$password:提供账户密码。
更多连接串的信息,请参见 通过 MySQL 客户端连接 seekdb。
示例如下:
mysql -hxxx.xxx.xxx.xxx -P2881 -uroot -p****** -Dtest
步骤四:修改 config.py 文件中的数据库连接信息
根据 步骤三:获取 seekdb 连接信息 中的信息修改文件 python-mysqlclient/config.py 中的数据库连接信息。
-
进入
python-mysqlclient项目文件夹。 -
修改
config.py文件中的数据库连接信息。- 在 Windows 环境下,使用文本编辑器打开
config.py文件,修改文件中的数据库连接信息,确保与实际情况相符。 - 在 Linux 环境下,可以使用
vi config.py或者vim config.py命令编辑config.py文件,修改文件中的数据库连接信息,确保与实际情况相符。
config.py文件中的数据库连接信息示例如下:OCEANBASE_CONFIG = {
'host': '10.10.10.1',
'port': 2881,
'user': 'root',
'password': '******',
'database': 'test',
'charset': 'utf8mb4'
} - 在 Windows 环境下,使用文本编辑器打开
步骤五:运行 main.py 文件
打开命令提示符或 PowerShell 终端,运行 python main.py 命令启动程序。
-
进入到
python-mysqlclient项目目录下。示例如下:
cd /home/admin/python-mysqlclient -
运行以下命令启动
main.py程序。python main.py返回结果如下:
Table created successfully
Instruction: 1.Insert Data; 2.Query Data; 3.Exit.
Enter the command [1/2/3]>
步骤六:在交互式命令行界面进行相应的操作
-
插入数据成功示例。
-
在交互式命令行界面,输入指令
1,按回车键。示例如下:
Enter the command [1/2/3]> 1 -
在提示
Enter name:后,输入姓名,按回车键。示例如下:
Enter name:A1 -
在提示
Enter age:后,输入年龄,按回车键。示例如下:
Enter age:18 -
返回插入数据成功,显示
Record inserted successfully。最后,显示指令说明,提示用户可以输入1、2或3,按回车键执行相应操作。示例如下:
Record inserted successfully
Instruction: 1.Insert Data; 2.Query Data; 3.Exit.
Enter the command [1/2/3]>
-
-
插入数据失败示例。
-
在交互式命令行界面,输入指令
1,按回车键。示例如下:
Enter the command [1/2/3]> 1 -
在提示
Enter name:后,输入姓名,按回车键。示例如下:
Enter name:A2 -
在提示
Enter age:后,输入年龄,按回车键。信息字段年龄的数据类型是整型。
示例如下:
Enter age:十八 -
返回插入数据错误信息,显示
(1366, 'Incorrect integer value')。最后,显示指令说明,提示用户可以输入1、2或3,按回车键执行相应操作。示例如下:
(1366, 'Incorrect integer value')
Instruction: 1.Insert Data; 2.Query Data; 3.Exit.
Enter the command [1/2/3]>
-
-
查询数据示例。
-
在交互式命令行界面,输入指令
2,按回车键。示例如下:
Enter the command [1/2/3]> 2 -
显示表的数据。最后,显示指令说明,提示用户可以输入
1、2或3,按回车键执行相应操作。示例如下:
(1, 'A1', 18)
Instruction: 1.Insert Data; 2.Query Data; 3.Exit.
Enter the command [1/2/3]>
-
-
输入错误指令示例。
-
在交互式命令行界面,输入一个不是
1/2/3的,按回车键。示例如下:
Enter the command [1/2/3]> A -
返回错误信息,显示
Invalid command, please enter command again [1/2/3]。最后,显示指令说明,提示用户可以输入1、2或3,按回车键执行相应操作。示例如下:
Invalid command, please enter command again [1/2/3]
Instruction: 1.Insert Data; 2.Query Data; 3.Exit.
Enter the command [1/2/3]>
-
-
退出程序示例。
在交互式命令行界面,输入指令
3,按回车键退出程序。示例如下:
Enter the command [1/2/3]> 3
项目代码介绍
点击 python-mysqlclient 下载项目代码,是一个名称为 python-mysqlclient.zip 的压缩包。
解压后,得到一个名为 python-mysqlclient 的文件夹。目录结构如下所示:
python-mysqlclient
├── config.py
├── db.py
├── main.py
└── requirements.txt
文件说明:
-
config.py:用于管理数据库连接配置信息。 -
db.py:用于操作数据库,包括创建表、插入数据、查询数据等。 -
main.py:应用程序的入口,包含了简单的用户交互界面,用户可以通过输入命令来执行相应的操作。 -
requirements.txt:列出了项目所需的 Python 库。信息本文获取的代码中只列出了 mysqlclient 库的版本要求,可以通过
pip install -r requirements.txt命令安装,执行以上命令后,会自动安装所需的库。
config.py 代码介绍
使用 Python 连接数据库时需要指定数据库连接参数,可以将这些参数放在一个单独的配置文件中,比如 config.py 文件。将这些参数封装在一个字典中,可以避免在每个文件中都重复写入这些参数的麻烦, 直接在其他 Python 文件中引用该字典来连接数据库即可。
本文获取的 config.py 文件中的代码定义了一个名为 OCEANBASE_CONFIG 的字典变量,用于管理 seekdb 连接参数。
代码如下:
OCEANBASE_CONFIG = {
'host': 'localhost',
'port': 2881, # 默认端口,可根据实际情况修改
'user': 'root',
'password': '',
'database': 'db_name',
'charset': 'utf8mb4'
}
参数解释:
host:提供 seekdb 的连接 IP。应该被实际的 IP 替换,也可以使用本地 IP 及 127.0.0.1。port:提供 seekdb 接端口。应该被实际的端口替换,默认是 2881,在部署 seekdb 时可自定义。user:连接数据库的用户名。password:连接数据库的密码。database:要连接的数据库名。charset:连接数据库时使用的字符集。
具体的属性(参数)配置取决于项目需求和数据库的特点,建议您根据实际情况进行调整和配置。
db.py 代码介绍
db.py 文件是一个 Python 语言编写的封装数据库操作的模块,主要用于实现数据库的增删改查操作。
该文件中主要包括以下几个部分:
-
导入 MySQLdb 模块和导入数据库连接参数。
代码如下:
import MySQLdb
from config import OCEANBASE_CONFIG -
定义创建表的函数。
定义函数
create_table,该函数的作用是在 seekdb 中创建名为test_tbl1的表。使用with语句管理数据库连接和游标对象的生命周期,保证了数据库连接和游标对象的安全关闭,避免了内存泄漏等问题。定义 SQL 语句,执行 SQL 语句,打印输出执行结果或异常信息。代码如下:
def create_table():
with MySQLdb.connect(**OCEANBASE_CONFIG) as conn:
with conn.cursor() as cursor:
try:
create_table_sql = """
CREATE TABLE test_tbl1 (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT UNSIGNED NOT NULL,
PRIMARY KEY (id)
) ENGINE=OCEANBASE AUTO_INCREMENT=1
"""
cursor.execute(create_table_sql)
print("Table created successfully")
except MySQLdb.Error as err:
print(err) -
定义插入数据的函数。
定义函数
insert_record,该函数主要实现了向指定表中插入一条记录,记录包含name和age两个字段。使用with语句管理数据库连接和游标对象的生命周期,保证了数据库连接和游标对象的安全关闭,避免了内存泄漏等问题。定义 SQL 语句,执行插入操作,提交事务,打印输出执行结果或异常信息。代码如下:
def insert_record(table_name, name, age):
with MySQLdb.connect(**OCEANBASE_CONFIG) as conn:
with conn.cursor() as cursor:
try:
insert_sql = f"INSERT INTO {table_name} (name, age) VALUES (%s, %s)"
cursor.execute(insert_sql, (name, age))
conn.commit()
print("Record inserted successfully")
except MySQLdb.Error as err:
print(err) -
定义查询表数据的函数。
定义函数
select_all,该函数主要实现了查询指定表中的所有记录的功能。使用with语句管理数据库连接和游标对象的生命周期,保证了数据库连接和游标对象的安全关闭,避免了内存泄漏等问题。定义 SQL 语句,执行查询操作并遍历查询结果,打印输出所有记录。如果发生异常,则捕捉异常并打印输出异常信息。代码如下:
def select_all(table_name):
with MySQLdb.connect(**OCEANBASE_CONFIG) as conn:
with conn.cursor() as cursor:
try:
select_sql = f"SELECT * FROM {table_name}"
cursor.execute(select_sql)
result = cursor.fetchall()
for row in result:
print(row)
except MySQLdb.Error as err:
print(err)