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

news2024/11/24 5:52:08

还在用百度搜索编程吗? 直接上 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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rabbitmq入门学习

写在前面 本文看下rabbit mq的基础概念以及使用。 1:简单介绍 为了不同进程间通信的解耦,出现了消息队列,为了规范消息队列的具体实现,Java制定了jms规范,这是一套基于接口的规范,因此是绑定语言的&…

Xcode15更新内容

参考博客: 【WWDC 2023】Xcode 15 更新内容 文章目录 1. xcode15起,项目内创建的图片可以使用点语法访问2.2. UIKit项目也可以使用预览功能3. Xcode新增标签功能4.Log分类 1. xcode15起,项目内创建的图片可以使用点语法访问 2.2. UIKit项目也…

台达PLC和触摸屏之间无线MODBUS通讯

今天,我们来一起学下下台达PLC与触摸屏之间无线通信的实现方法。其中触摸屏作为主站,台达PLC作为从站,并采用日系PLC专用无线通讯终端DTD435MC,作为实现无线通讯的硬件设备。 台达PLC和触摸屏通讯关键是对于通讯参数的设置。 触…

C++入门学习(4)引用 (讲解拿指针比较)

上期回顾 在学习完函数重载之后,我们可以使用多个重名函数进行操作,会发现C真的是弥补了好多C语言的不足之处,真的不禁感概一下,时代的进步是需要人去做出改变的,而不是一味的使用啊!所以我们今天继续学一下…

从白日梦到现实:推出 Elastic 的管道查询语言 ES|QL

作者:George Kobar, Bahubali Shetti, Mark Settle 今天,我们很高兴地宣布 Elastic 的新管道查询语言 ES|QL(Elasticsearch 查询语言)的技术预览版,它可以转换、丰富和简化数据调查。 ES|QL 由新的查询引擎提供支持&am…

企业如何通过CRM系统赢得客户?

在CRM客户管理系统中,我们可以将培养客户关系简单理解为提供良好的客户体验。这对于企业来说非常重要,不仅可以赢得客户实现成交,更可以塑造口碑,带来更多的新客户。下面我们说说,如何通过CRM系统快速赢得客户&#xf…

【最新版】ChatGPT付费创作系统V2.4.9独立版 +WEB端+ H5端 + 小程序端(支持分享朋友圈)

人类小徐提供的GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序,是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。当前全民热议ChatGPT,流量超级大,引流不要太简单!一键下单即可拥有自己的GPT&#xff0…

antdv使用a-cascader联级选择器实现自定义浮层样式

一般的使用组件库想要自定义样式都会使用深度选择器deep去实现 但是有的组件不管是deep还是!important还是写行内样式都改不掉 这里主要讲使用a-cascader联级选择器的浮层改变样式 一&#xff0c;使用组件 <a-cascader:options"regionOptions"change-on-selectv…

Valve 近日又为所有支持平台发布了新的 Steam 客户端更新

导读继发布 SteamVR 2.0 之后&#xff0c;Valve 近日又为所有支持平台发布了新的 Steam 客户端更新&#xff0c;其中引入了多项新功能、改进和错误修复&#xff0c;为玩家提供最佳的 Linux 游戏体验。 对于 Linux 玩家来说&#xff0c;新的 Steam Client 更新包括 64 位 openvr…

【SWAT】SWAT-CUP动态基流分割相关说明

说明 SWAT不会在输出.rch文件中打印基流和侧向流。相反,它将它们打印在输出.sub文件中。为了获得基流时间序列,必须从输出中筛选出观测断面上游的所有子流域,必须计算其面积加权平均值(+从mm到m3/s的额外单位转换)。SWAT-CUP动态基流分割并没有计算基流,而是根据提供的动…

JS操作字符串常见方法

目录 一&#xff1a;前言 二&#xff1a;常见的内置方法 1、charAt与charCodeAt 2、indexOf与lastIndexOf 3、substring与substr 4、toLowerCase 和 toUpperCase 5、slice 6、replace 7、split 8、concat 9、trim 10、trimStart / trimLeft 11、trimEnd / trimRigh…

机器学习——逻辑回归

一、分类问题 监督学习的最主要类型 分类&#xff08;Classification&#xff09;&#xff1a; 身高1.85m&#xff0c;体重100kg的男人穿什么尺码的T恤&#xff1f;根据肿瘤的体积、患者的年龄来判断良性或恶性&#xff1f;根据用户的年龄、职业、存款数量来判断信用卡是否会…

【AWS系列】使用 Amazon SageMaker 微调和部署 ChatGLM 模型

前言 大语言模型是一种基于深度学习技术的人工智能模型&#xff0c;可以追溯到早期的语言模型和机器翻译系统。直到最近&#xff0c;随着深度学习技术的崛起&#xff0c;大型预训练语言模型才开始引起广泛的关注。 大语言模型使用大规模的文本数据集进行预训练&#xff0c;从而…

【VSCode】VSCode自定义代码编辑区背景色

// A code block { "editor.fontSize": 16, "editor.mouseWheelZoom": true, "editor.tabSize": 2, "workbench.colorCustomizations": { // 写在 Atom One Light 里面则只对该主题有效 "[Atom One Light]"…

GreenPlum简介

简介 Greenplum是一家总部位于**美国加利福尼亚州&#xff0c;为全球大型企业用户提供新型企业级数据仓库(EDW)、企业级数据云(EDC)和商务智能(BI)提供解决方案和咨询服务的公司&#xff0c;在全球已有&#xff1a;纳斯达克&#xff0c;纽约证券交易所&#xff0c;Skype. FOX&…

第四章:java关键字super

系列文章目录 文章目录 系列文章目录前言一、super关键字二、super 和 this 的比较总结 前言 super关键字可以用于对象访问父类成员。 一、super关键字 super 代表父类的引用&#xff0c; 用于访问父类的属性、 方法、 构造器。 super.属性名 //访问父类的属性&#xff0c;不…

2003-2022年高铁数据高铁开通时间数据

2003-2022年高铁数据高铁开通时间数据 1、时间&#xff1a;2003-2022年 2、指标&#xff1a;高铁站名称、开通时间、所在省份、所在城市、所属线路名称、以及相关备注 3、指标说明&#xff1a; Hsrwsnm[高铁站名称]-高铁站名称 Optm[开通时间]-高铁站开通的时间 Prvn[所在…

java传base64返回给数据报404踩坑

一、问题复现 1.可能因为base64字符太长&#xff0c;导致后端处理时出错&#xff0c;表现为前端请求报400错误&#xff1b; 这一步debug进去发现base64数据是正常传值的 所以排除掉不是后端问题,但是看了下前端请求,猜测可能是转换base64时间太长数据过大导致的404 2.前端传…

【C++】——基础编程

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

牵手世界顶尖科学家论坛,五粮液扩大国际高端平台布局

执笔 | 尼 奥 编辑 | 扬 灵 11月6日&#xff0c;以“科学引领变革 重塑世界韧性”为主题的第六届世界顶尖科学家论坛&#xff08;以下简称“顶科论坛”&#xff09;在上海召开。来自25个国家和地区&#xff0c;包括27位诺奖得主在内的100余位海外顶尖科学家、40余位中国两…