利用AI快速跨过新手区:用DevChat编写Python程序-CSV导入TDengine

还在用百度搜索编程吗? 直接上 AI,帮助小白快速跨过新手区。

以下用一个物联网最常见的场景做示例演示如何利用 AI 快速编程。

ChatGPT4 是目前最火的 AI 了,但是国内却用不了。不过现在新出的 DevChat 可以让大家尝鲜一番。

以下介绍来自Bing AI 聊天的介绍:

DevChat是一个开源平台,旨在帮助开发人员更有效地将人工智能集成到代码生成和文档编制中。它提供了一种非常实用和有效的方式,让开发人员与大型语言模型(LLM)进行交互和协作 。DevChat旨在超越简单的代码自动完成和对代码片段的有限操作,使您的编码生活更轻松 。

不是我懒,既然用 AI,就用到底。

目录

  • [0. 环境准备](#0. 环境准备)
    • [0.1. 创建数据库](#0.1. 创建数据库)
    • [0.2. 构造测试数据](#0.2. 构造测试数据)
  • [1. 安装 DevChat](#1. 安装 DevChat)
  • [2. 使用DevChat编程](#2. 使用DevChat编程)
    • [2.1. 从CSV读取数据到数组](#2.1. 从CSV读取数据到数组)
    • [2.2. 将数组数据拼接成SQL](#2.2. 将数组数据拼接成SQL)
    • [2.3. 将数据写入数据库](#2.3. 将数据写入数据库)
    • [2.4. 程序修改](#2.4. 程序修改)
    • [2.5 运行代码](#2.5 运行代码)
  • [3. 程序优化](#3. 程序优化)
  • [4. 福利](#4. 福利)

0. 环境准备

先做一下环境准备,本次准备编写一个将 CSV 文件导入 TDengine 数据库的程序。前期需要搭建 TDengine 数据库和构造示例 CSV 文件。

0.1. 创建数据库

TDengine 数据的安装和配置可以参考我之前的文章TDengine3.0 基础操作TDengine学习笔记-集群安装

软件安装好以后,创建测试用的数据库和表。

sql 复制代码
create database test vgroup 1 stt_trigger 1;
use test;
create table t1(ts timestamp,v1 int,v2 int,v3 int);

数据库参数的介绍见我之前的文章或TDengine官网,如果是测试使用,默认参数就可以,直接执行 create database test;

0.2. 构造测试数据

使用脚本,构造100行数据。按照 TDengine 的最佳实践,时间直接用EPOCH格式

bash 复制代码
st=1696118400000
for i in {1..100}
do
    echo "${st},$i,$i,$i" >>test.csv
    st=$(($st+1000))
done

数据库默认时间精度是 ms,所以这里采用毫秒精度,数据时间按秒递增。

1. 安装 DevChat

VSCode 大家都不陌生,DevChat 提供了 VSCode 插件,可以方便的集成。按照方式也非常简单,具体安装方式见官方博客:

DevChat VSCode 插件安装配置指南

官方文档很详细,这里就不截图了。

2. 使用DevChat编程

程序设计思路:

  1. 从csv读取数据到数组
  2. 将数组数据拼接成sql
  3. 将数据写入数据库

这部分工作还得自己来,AI 替代不了。

2.1. 从CSV读取数据到数组

关门放 DevChat

python 复制代码
import csv

# 函数用于从csv文件读取数据并存储在数组中
def read_csv(file_path):
    data = []
    with open(file_path, 'r') as file:
        reader = csv.reader(file)
        for row in reader:
            data.append(row)
    return data

#替换为实际的csv文件路径
csv_data = read_csv("/path/to/your/file.csv")

点击 Insert Code 可以直接将代码添加到文件中,复制粘贴都省了。

2.2. 将数组数据拼接成SQL

这部分会复杂一点,因为 TDengine 最大 SQL 长度为 1MB,因此我们在拼接 SQL 时候,需要能够限制 SQL 的长度。

python 复制代码
def create_sql_query(arr, chunk_size):
    sql_queries = []
    for i in range(0, len(arr), chunk_size):
        chunk = arr[i:i+chunk_size]
        values = ', '.join(f"'{item}'" for item in chunk)
        sql_query = f"INSERT INTO table (values) VALUES ({values})"
        sql_queries.append(sql_query)
    return sql_queries

同时我也对比了一下CSDN的写作助手。

代码如下:

python 复制代码
sql = ""
for i in range(0, len(data), length):
    sub_data = data[i:i+length]
    sub_sql = "UPDATE table SET field IN ({})".format(",".join(sub_data))
    sql += sub_sql

print(sql)

实现逻辑一样,但是个人认为 DevChat 将 SQL 存入数组的实现方式更方便。

2.3. 将数据写入数据库

为了让代码更简单,也降低一下 DevChat 的工作量,这里采用 Restful 方式进行数据库的写入(原生方式太复杂,怕 DevChat 处理不了)。

python 复制代码
import requests
import json

# 首先,我们需要通过RESTful方式登录到数据库
login_url = "http://localhost:6041/rest/login/root/taosdata"  # 使用你的用户名和密码
login_res = requests.get(login_url)
if login_res.status_code != 200:
    print("Failed to log in!")
else:
    print("Login to database successfully!")

# 接下来,我们插入一些数据
insert_url = "http://localhost:6041/rest/sql"
headers = {'Authorization': 'Basic cm9vdDp0YW9zZGF0YQ=='}
data = {
    "sql": "INSERT INTO weather.city VALUES(now, 'Beijing', 20.5, 'sunny')"
}

res = requests.post(insert_url, headers=headers, data=json.dumps(data))
if res.status_code != 200:
    print("Failed to insert data! Please check your SQL.")
else:
    print("Data inserted successfully!")

这部分需要给先 DevChat 点赞,代码在连接TDengine数据库使用了 Authorization 参数,比使用明文的账号密码要好很多,如果能够写出自定义 Token 的代码就更完美了。

2.4. 程序修改

AI 生成的程序必定和我们实际的场景存在偏差,获取到各功能块代码后,还需要做一下简单的修改。

python 复制代码
import csv
import requests
import json

# 函数用于从csv文件读取数据并存储在数组中
def read_csv(file_path):
    data = []
    with open(file_path, 'r') as file:
        reader = csv.reader(file)
        for row in reader:
            data.append(row)
    return data

def create_sql_query(arr, chunk_size):
    sql_queries = []
    for i in range(0, len(arr), chunk_size):
        chunk = arr[i:i+chunk_size]
        values = ' '.join(f"({','.join(item)})" for item in chunk)
        sql_query = f"INSERT INTO test.t1 VALUES {values};"
        sql_queries.append(sql_query)
    return sql_queries

csv_data = read_csv("test.csv")

# 首先,我们需要通过RESTful方式登录到数据库
login_url = "http://10.7.7.14:6041/rest/login/root/taosdata"  # 使用你的用户名和密码
login_res = requests.get(login_url)
if login_res.status_code != 200:
    print("Failed to log in!")
else:
    print("Login to database successfully!")

insert_url = "http://10.7.7.14:6041/rest/sql"
headers = {'Authorization': 'Basic cm9vdDp0YW9zZGF0YQ=='}

sql_list = create_sql_query(csv_data,10)

for sql in sql_list:
    print(sql)
    res = requests.post(insert_url, headers=headers, data=sql)
    if res.status_code != 200:
        print("Failed to insert data! Please check your SQL.")
    else:
        print("Data inserted successfully!")

除了文件名称、数据库地址外,针对以上代码,我主要做了两部分修改:

  • 增加了一个数组的遍历。这部分也可以使用 DevChat 完成,只是代码太简单就不浪费计算资源了。
  • 修改了sql的拼接方式。DevChat 给出的代码拼接方式是有问题的,如下图。这样的 SQL 啥数据库也用不了,这部分要提出批评。

2.5 运行代码

终于到最重要的环节了,检查 AI 的时候到了。

程序运行成功,下面检查一下数据库

数据也全部写进去了。

3. 程序优化

DevChat 除了能帮助写程序,还能对程序进行排错有优化。选择Add to DevChat 将程序以附件形式发送给 DevChat,然后让其优化


优化后代码:

python 复制代码
import csv
import requests
import json

def read_csv(file_path):
    with open(file_path, 'r') as file:
        return list(csv.reader(file))

def create_sql_query(arr, chunk_size):
    sql_queries = []
    for i in range(0, len(arr), chunk_size):
        chunk = arr[i:i+chunk_size]
        values = ', '.join(f"({','.join(item)})" for item in chunk)
        sql_query = f"INSERT INTO test.t1 VALUES {values}"
        sql_queries.append(sql_query)
    return sql_queries

def execute_sql_query(url, headers, sql_query):
    res = requests.post(url, headers=headers, data=sql_query)
    if res.status_code != 200:
        print("Failed to insert data! Please check your SQL.")
    else:
        print("Data inserted successfully!")

def login_to_db(url):
    res = requests.get(url)
    if res.status_code != 200:
        print("Failed to log in!")
    else:
        print("Login to database successfully!")
        return True

def main():
    csv_data = read_csv("test.csv")

    login_url = "http://10.7.7.14:6041/rest/login/root/taosdata"
    if not login_to_db(login_url):
        return

    insert_url = "http://10.7.7.14:6041/rest/sql"
    headers = {'Authorization': 'Basic cm9vdDp0YW9zZGF0YQ=='}

    sql_queries = create_sql_query(csv_data,10)

    for sql in sql_queries:
        execute_sql_query(insert_url, headers, sql)

if __name__ == "__main__":
    main()

4. 福利

目前 DevChat 可以免费试用,走过路过不要错过。

参赛成功的KOL会有专属红包兑换码,11月31日之前,粉丝可借助邀请码在Devchat兑换10元余额

红包码:CyqJYpDkAW2KMBGLiXywJW

DevChat 官方网站
GitHub

相关推荐
野蛮的大西瓜15 分钟前
开源呼叫中心中,如何将ASR与IVR菜单结合,实现动态的IVR交互
人工智能·机器人·自动化·音视频·信息与通信
CountingStars61940 分钟前
目标检测常用评估指标(metrics)
人工智能·目标检测·目标跟踪
tangjunjun-owen1 小时前
第四节:GLM-4v-9b模型的tokenizer源码解读
人工智能·glm-4v-9b·多模态大模型教程
冰蓝蓝1 小时前
深度学习中的注意力机制:解锁智能模型的新视角
人工智能·深度学习
橙子小哥的代码世界1 小时前
【计算机视觉基础CV-图像分类】01- 从历史源头到深度时代:一文读懂计算机视觉的进化脉络、核心任务与产业蓝图
人工智能·计算机视觉
黄公子学安全1 小时前
Java的基础概念(一)
java·开发语言·python
云云3211 小时前
怎么通过亚矩阵云手机实现营销?
大数据·服务器·安全·智能手机·矩阵
新加坡内哥谈技术2 小时前
苏黎世联邦理工学院与加州大学伯克利分校推出MaxInfoRL:平衡内在与外在探索的全新强化学习框架
大数据·人工智能·语言模型
程序员一诺2 小时前
【Python使用】嘿马python高级进阶全体系教程第10篇:静态Web服务器-返回固定页面数据,1. 开发自己的静态Web服务器【附代码文档】
后端·python
小木_.2 小时前
【Python 图片下载器】一款专门为爬虫制作的图片下载器,多线程下载,速度快,支持续传/图片缩放/图片压缩/图片转换
爬虫·python·学习·分享·批量下载·图片下载器