首页 > 数据库 > Oracle > Python 语言连接并操作 KWDB 数据库
纯命令行操作数据还是非常的麻烦的,且没有办法进行各类批量操作,那么本文就围绕着 Python 语言对 KWDB 数据库做链接以及 CRUD 操作做一个具体的讲解,操作的前提是环境,故而还需要对环境做出妥当的部署,否则是无法正常运行我们的代码的。
在官方网站中看到了 Python 给出了两种库操作,分别是:Psycopg 2 与 Psycopg 3,这里我使用 Psycopg 2 作为测试的库,因为我在安装 Psycopg 3 的时候需要了有些辅助库无法安装的情况,但是使用 Psycopg 2 就很顺畅,那么接下来我先罗列一下环境的概述与环境需求:
Psycopg 是专为 Python 编程语言而设计。Psycopg 完全遵循 Python DB API 2.0 规范,支持线程安全,允许多个线程共享同一连接,特别适合高并发和多线程的应用场景。
KWDB 支持用户通过 Psycopg 2 连接数据库,并执行创建、插入和查询操作。本示例演示了如何通过 Psycopg 2 驱动连接和使用 KWDB。
本示例使用的 Python 版本为 Python 3.10。
我这里是 python 3.13.2 版本,所以基础内容是没有问题的。
pip3 install psycopg2-binary
安装完毕后直接 pip3 list 查看是否安装成功。
开启开发工具,我这里使用的是 VSCode。
基础连接代码:
con = psycopg2.connect(database="ts_db", user="teacher", password="Abcd1234", host="8.147.135.144",port="26257")print("连接成功!")
con.set_session(autocommit=True)
cur = con.cursor()
运行 sql 的方式,这里的 sql 是字符串格式的,或者直接写上就行。
cur.execute(sql)
测试代码:
#!/usr/bin/env python3# -*- coding: UTF-8 -*-import psycopg2def main(): try:
con = psycopg2.connect(database="ts_db", user="teacher", password="Abcd1234", host="8.147.135.144",port="26257") print("连接成功!")
con.set_session(autocommit=True)
cur = con.cursor() except psycopg2.Error as e: print(f"连接Kaiwudb失败: {e}")
sql = "CREATE TABLE mytest_table \
(k_timestamp timestamp NOT NULL, \
voltage double, \
current double, \
temperature double \
) TAGS ( \
number int NOT NULL) \
PRIMARY TAGS(number) \
ACTIVETIME 3h"
try:
cur.execute(sql) except psycopg2.Error as e: print(f"创建表失败: {e}")
sql = "INSERT INTO mytest_table \
VALUES ('2024-07-01 10:00:00', 220.0, 3.0, 20.5,123)"
try:
cur.execute(sql) except psycopg2.Error as e: print(f"插入数据失败: {e}")
sql = "SELECT * from mytest_table"
try:
cur.execute(sql)
rows = cur.fetchall() for row in rows: print(f"k_timestamp: {row[0]}, voltage: {row[1]}, current: {row[2]}, temperature: {row[3]}, number: {row[4]}") except psycopg2.Error as e: print(f"查询数据失败: {e}")
cur.close()
con.close() returnif __name__ == "__main__":
main()
我用的是的 VSCode:
建库建表之前都操作过了,所以这里没有建表成功。可以看到查询是没有问题的,不影响全程的操作。
这里我添加了 50 条插入的循环操作,我计算了总时间以及平均插入时间。
#!/usr/bin/env python3# -*- coding: UTF-8 -*-# 在文件顶部添加time模块导入import psycopg2import time # 新增导入def main(): try:
con = psycopg2.connect(database="ts_db", user="teacher", password="Abcd1234", host="8.147.135.144",port="26257") print("连接成功!")
con.set_session(autocommit=True)
cur = con.cursor() except psycopg2.Error as e: print(f"连接Kaiwudb失败: {e}") # 生成50条测试数据(时间戳间隔1分钟)
base_time = '2024-07-01 10:00:00'
data = [
( f'2024-07-01 10:{i:02d}:00', 220.0 + i*0.1,
3.0 + i*0.02,
20.5 + i*0.3,
123 + i
)
for i in range(50)
]
sql = "INSERT INTO mytest_table VALUES (%s, %s, %s, %s, %s)"
try:
start_time = time.time() # 记录开始时间
cur.executemany(sql, data)
end_time = time.time() # 记录结束时间
# 计算并输出耗时
total_time = (end_time - start_time) * 1000 # 转换为毫秒
avg_time = total_time / 50
print(f"成功插入50条数据,总耗时:{total_time:.4f} 毫秒,平均每条耗时:{avg_time:.4f} 毫秒") except psycopg2.Error as e: print(f"批量插入数据失败: {e}")
sql = "SELECT * from mytest_table"
try:
cur.execute(sql)
rows = cur.fetchall() for row in rows: print(f"k_timestamp: {row[0]}, voltage: {row[1]}, current: {row[2]}, temperature: {row[3]}, number: {row[4]}") except psycopg2.Error as e: print(f"查询数据失败: {e}")
cur.close()
con.close() returnif __name__ == "__main__":
main()
展示对应的效果,成功的插入了 50 条数据。与对一个的信息展示。
仅仅看这些数据觉得也不快啊,那么咱们分析一下。
KWDB 插入 50 条数据耗时 822.1955 毫秒,平均每条 16.4439 毫秒,该数据仅反映特定环境和数据下的情况。若数据具有明显的时间序列特征,且插入操作频繁,KWDB 的设计使其在这类场景下的插入性能可能优于 MySQL。然而,在传统关系型数据处理场景中,MySQL 经过长期优化,对复杂关联、事务处理等操作有更好的支持,插入性能可能更稳定。在电商订单处理系统中,MySQL 能更好地满足订单数据与用户信息、商品信息等多表关联及事务处理的需求;而在电力监测系统中,KWDB 更适合处理电力设备产生的大量时序数据插入。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70047110/viewspace-3091246/ ,如需转载,请注明出处,否则将追究法律责任。