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

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

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

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

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

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

目录

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/121899.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux生成code文件

1. 设置core文件路径在当前工作目录 echo "core-%e-%p-%t" > /proc/sys/kernel/core_pattern 具体参数 %s - insert signal that caused the coredump into the filename 添加导致产生core的信号 %t - insert UNIX time that the coredump occurred into filen…

scss 实用教程

变量 $ 定义变量 $link-color: blue;变量名可以与css中的属性名和选择器名称相同 使用变量 a {color: $link_color; }$highlight-border: 1px solid $link_color;中划线和下划线相互兼容,即中划线声明的变量可以使用下划线的方式引用,反之亦然。 $li…

Python教程:随机函数,开始猜英文单词的游戏

开始猜英文单词的游戏… 总计生命次数:3次 -----------游戏开始中…----------- ????请猜一个,4位数的单词:mafr 猜错了,再努力一下 -----------你还有2次生命------------ ma?&…

一文带你走进 AIGC(生成式人工智能)世界

AI(人工智能)是一门在过去几十年中不断增长其能力和效用的学科。AI 驱动的工具正逐渐成为主流,例如改进的语音识别、及时翻译以及令人惊叹不止的图像编辑工具,它们使我们能够根据自定义风格轻松地突出显示图像中想要替换的内容。 …

如何下载PDF版本的专利

问题描述:有时下载的专利是CAJ格式,需要用CAJViewer软件才能观看,那么如何下载pdf版本的呢? 问题解决: 方法一: 使用CAJViewer软件进行转换。(注意:这种方法转换的PDF其实就是一个…

Linux环境下安装人大金仓数据库

人大金仓产品简介 金仓数据库管理系统[简称:KingbaseES]是北京人大金仓信息技术股份有限公司(简称人大金仓)自主研发的、具有自主知识产权的商用关系型数据库管理系统(DBMS)。该产品面向事务处理类应用,兼顾各类数据分…

JAVA 版小程序商城免费搭建 多商家入驻 直播带货 商城系统 B2B2C 商城源码之 B2B2C产品概述

1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

idea使用git删除本地提交(未推送)

1、找到reset head 2、打开弹窗,在HEAD后面输入^ 结果为HEAD^ 注释: Reset Type 有三种: Mixed(默认方式),保留本地源码,回退 commit 和 index 信息,最常用的方式Soft 回退到某个版本…

Solidity快速入门之函数输出

返回值return和returns Solidity有两个关键字与函数输出相关:return和returns,他们的区别在于: returns加在函数名后面,用于声明返回的变量类型及变量名;return用于函数主体中,返回想要返回的变量&#x…

JSP通用材料收集归档系统eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 JSP 通用材料收集归档系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0&#xff0c…

让BI自动生成零售数据分析报表?用模板

不知道BI零售数据分析怎么做?用模板。 没时间去整理数据、计算零售数据分析指标?用模板。 不知道怎么做出炫酷直观的零售数据分析报表?用模板。 …… 奥威BI零售数据分析模板全新上线,数据分析模型、数据可视图表、关键指标以…

什么是ADC测试,能进行自动化测试吗?

ADC测试是一种电子测试方法,用于评估模拟-数字转换器的性能。ADC(模数转换器)是一种将模拟信号转换为数字信号的电子器件。在ADC测试中,会施加一个已知的模拟信号到ADC的输入端,然后测量其数字输出,通过比较输入信号和输出信号之间…

网络安全(黑客)-零基础小白高效自学

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高; 二、则是发展相对成熟…

排序算法之-冒泡

顺序排序算法原理 从头开始遍历未排序数列,遍历时比较相邻的两个元素,前面的大于后面的,则双方交换位置,一直比较到末尾,这样最大的元素会出现在末尾,接着再依次从头开始遍历剩余未排序的元素,…

等保测评怎么做?有哪些流程?

现在很多信息系统想要上线都需要做等保测评,如果不能通过等保测评,不仅系统不允许上线,同时一旦出现了网络安全事件,相关企业还需要承担重要的责任。目前如果是为政府、事业单位、国企等开发系统,等保测评报告也是重要…

银行转账p图在线制作生成,回执单凭证,工商农业邮政建设,易语言画板!

小编这边用易语言画板实现了一个可以自动P银行回执单的软件,当然我加了水印的,生成的图片都有水印,防止被恶意利用,然后可以选择模版,通过单选框的方式,生成的是转账成功后的截图奥,在编辑框输入…

微信小程序使用iconfont坑

下载解压 font-face {font-family: "iconfont"; /* Project id 4322044 */src: url(iconfont.woff2?t1699515502419) format(woff2),url(iconfont.woff?t1699515502419) format(woff),url(iconfont.ttf?t1699515502419) format(truetype); }.iconfont {font-famil…

Mybatis-Plus前后端分离多表联查模糊查询分页

数据准备 数据库配置: /*Navicat Premium Data TransferSource Server : localhost_3306Source Server Type : MySQLSource Server Version : 80100 (8.1.0)Source Host : localhost:3306Source Schema : test01Target Server Type : MySQLT…

ARM寄存器及功能介绍/R0-R15寄存器

1、ARM 寄存器组介绍 ARM 处理器一般共有 37 个寄存器,其中包括: (1) 31 个通用寄存器,包括 PC(程序计数器)在内,都是 32 位的寄存器。 (2) 6 个状态寄存器…

Flutter 08 三棵树(Widgets、Elements和RenderObjects)

一、Flutter三棵树背景 1.1 先思考一些问题 1. Widget与Element是什么关系?它们是一一对应的还是怎么理解? 2. createState 方法在什么时候调用?state 里面为啥可以直接获取到 widget 对象? 3. Widget 频繁更改创建是否会影响…