利用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

相关推荐
隔着天花板看星星几秒前
Kafka-副本分配策略
大数据·分布式·中间件·kafka
GL_Rain4 分钟前
【OpenCV】Could NOT find TIFF (missing: TIFF_LIBRARY TIFF_INCLUDE_DIR)
人工智能·opencv·计算机视觉
shansjqun9 分钟前
教学内容全覆盖:航拍杂草检测与分类
人工智能·分类·数据挖掘
狸克先生11 分钟前
如何用AI写小说(二):Gradio 超简单的网页前端交互
前端·人工智能·chatgpt·交互
Lorin 洛林20 分钟前
Hadoop 系列 MapReduce:Map、Shuffle、Reduce
大数据·hadoop·mapreduce
baiduopenmap26 分钟前
百度世界2024精选公开课:基于地图智能体的导航出行AI应用创新实践
前端·人工智能·百度地图
小任同学Alex29 分钟前
浦语提示词工程实践(LangGPT版,服务器上部署internlm2-chat-1_8b,踩坑很多才完成的详细教程,)
人工智能·自然语言处理·大模型
新加坡内哥谈技术35 分钟前
微软 Ignite 2024 大会
人工智能
DolphinScheduler社区35 分钟前
大数据调度组件之Apache DolphinScheduler
大数据
SelectDB技术团队36 分钟前
兼顾高性能与低成本,浅析 Apache Doris 异步物化视图原理及典型场景
大数据·数据库·数据仓库·数据分析·doris