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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

还在用百度搜索编程吗 直接上 AI帮助小白快速跨过新手区。
以下用一个物联网最常见的场景做示例演示如何利用 AI 快速编程。

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

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

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

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

目录

0. 环境准备

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

0.1. 创建数据库

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

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

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格式

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
在这里插入图片描述

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 的长度。
在这里插入图片描述

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的写作助手。
在这里插入图片描述
代码如下

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 处理不了。
在这里插入图片描述

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 生成的程序必定和我们实际的场景存在偏差获取到各功能块代码后还需要做一下简单的修改。

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然后让其优化

在这里插入图片描述
在这里插入图片描述

优化后代码

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元余额

DevChat 官方网站
GitHub

最后吐槽一下邀请他人的链接居然点不了。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: python