DuckDB简单使用及Python操作

news/2024/9/30 13:16:42

DuckDB简介

DockUB官网

image

DuckDB是一款开源免费类似Sqlite的嵌入式数据库,支持直接使用内存或单个文件作为数据库。
DuckDB着重于数据处理和分析,是一个款OLAP(联机分析处理)类型的数据库,主要特点如下:

  • 开源免费,MIT协议
  • 功能完善,支持标准SQL、事务、二级索引等
  • 高性能,低消耗(内存 / 文件占用小)
  • 灵活的扩展机制,可以直接冲CSV / JSON / MySQL 等读取数据
  • 支持Python / Java / Go / C / C++ / Nodejs / Rust 等主流编程语言,并提供命令行工具

DockDB安装

DockDB直接下载一个duckdb可执行文件,然后运行即可。

下载/安装链接

启动方式有两种

  1. 使用内存作为数据库,直接运行duckdb可执行文件即可
$ ./duckdb 
v1.1.0 fa5c2fe15f
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
D 

最后显示的D是提示符,表示在DuckDB中,此时输入SQL,回车即可执行

  1. 使用文件作为数据库,文件不存在则自动创建
$ ./duckdb demo.db
v1.1.0 fa5c2fe15f
Enter ".help" for usage hints.
D 

DuckDB命令行简单使用

不同与MySQL这种多数据库服务,duckdb 内存 / 某个文件就是一个单独的数据库,因此不支持create database xxx;这种操作,但是支持show databases;

启动DuckDB并新建数据

$ ./duckdb demo.db    
v1.1.0 fa5c2fe15f
Enter ".help" for usage hints.
D 

显示当前数据库

D show databases;
┌───────────────┐
│ database_name │
│    varchar    │
├───────────────┤
│ demo          │
└───────────────┘
D 

创建表

经试验,不支持AUTO_INCREMENT 字段限制

D create table user (id int primary key,name varchar(50) not null, age int);
D 

查看当前数据库所有表

D show tables;
┌─────────┐
│  name   │
│ varchar │
├─────────┤
│ user    │
└─────────┘
D 

插入数据

D insert into user values(1,'Kevin',18);
D insert into user values(2,'Lily',19);
D 

查询数据

D select * from user where id=1;
┌───────┬─────────┬───────┐
│  id   │  name   │  age  │
│ int32 │ varchar │ int32 │
├───────┼─────────┼───────┤
│     1 │ Kevin   │    18 │
└───────┴─────────┴───────┘
D 

Python操作DuckDB

安装Python三方包duckdb

pip install duckdb

连接数据库(文件)

import duckdb# 连接数据库,文件不存在则自动创建
con = duckdb.connect("demo.db")

执行sql,可以用con.sql('...')con.execute('...')执行sql,两个方法几乎完全相同

不需要建立游标,不需要commit

执行后可以进行链式操作,如:

  • con.sql('...').show(): 以表格方式显示(打印)结果
  • con.sql('...').fetchone(): 获取一条结果,返回tuple类型
  • con.sql('...').fetchall(): 获取所有结果,返回List[tuple]类型

创建表

import duckdbcon = duckdb.connect("demo.db")
con.sql('create table if not exists course (id int primary key,course_name varchar(50) not null); ')
con.sql('show tables').show()

运行后显示如下:

┌─────────┐
│  name   │
│ varchar │
├─────────┤
│ course  │
└─────────┘

插入及查询数据

import duckdbcon = duckdb.connect("demo.db")con.execute("insert into course values(1, '中文');")  # 不可重复执行
con.execute("insert into course values(2, '英语');")  # 不可重复执行r = con.sql("select * from course where course_name='中文';").fetchone()
print(r)

运行后显示如下:

(1, '中文')

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

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

相关文章

CloudFire+PicGo搭建免费图床

目录CloudFire对象存储创建bucket配置域名配置 Bucket 访问 APIPicGO配置 CloudFire对象存储 | CloudFire提供对象存储服务,每个月有10G的免费额度,并且直连稳定可靠,无需CDN加速,足够作为日常图床使用。 创建bucket 打开CloudFire官网并注册账号,点击R2存储。创建图床buc…

Invicti v24.9.0 发布下载,新增功能概览

Invicti v24.9.0 发布下载,新增功能概览Invicti v24.9.0 for Windows - Web 应用程序安全测试 Invicti Standard v24.9.0 – 10 Sep 2024 请访问原文链接:https://sysin.org/blog/invicti/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.orgInvicti 是一种自动化…

Parallels Desktop 20 发布下载,macOS Sequoia 和 Windows 11 24H2 支持准备就绪

Parallels Desktop 20 发布下载,macOS Sequoia 和 Windows 11 24H2 支持准备就绪Parallels Desktop for Mac 20.0.0 (build 55653) - 在 Mac 上运行 Windows macOS Sequoia 和 Windows 11 24H2 支持准备就绪 请访问原文链接:https://sysin.org/blog/parallels-desktop/,查看…

rsync 学习笔记(一)编译

一、背景rsync二进制程序依赖外部库,由于安全问题,有时会单独升级依赖的外部库。另外为了防止因为栈溢出攻击导致服务器被黑,需要对rsync及其依赖的外部库重新编译,开启安全编译选项,增加黑客破解的复杂度。所有的库编译必须要求加上如下编译选项:栈保护(-fstack-protect…

Go runtime 调度器精讲(一):Go 程序初始化

原创文章,欢迎转载,转载请注明出处,谢谢。0. 前言 本系列将介绍 Go runtime 调度器。要学好 Go 语言,runtime 运行时是绕不过去的,它相当于一层“操作系统”对我们的程序做“各种类型”的处理。其中,调度器作为运行时的核心,是必须要了解的内容。本系列会结合 Go plan9 …

煤矿皮带跑偏监测识别系统

煤矿皮带跑偏监测识别系统对皮带状况进行实时监测,不用手动控制。一旦监测到皮带跑偏或者其他异常情况时,应该马上开展警报,通知监督管理办公室,并提醒负责人及时处置,并把警报截屏和视频储存到数据库系统系统中生成表格。煤矿皮带跑偏监测识别系统根据时间段对告警记录和…

GIS建库软件:地理信息与遥感领域的数据基石

在地理信息与遥感科学的浩瀚星海中,建库软件是构筑数据宇宙的基石,它不仅承载着海量地理空间数据,更是连接信息与应用的桥梁。本文将从其定义、关键技术、应用场景及未来发展四个方面,深入剖析建库软件如何支撑并推动整个行业的发展。建库软件:数据海洋的港湾建库软件,顾…

mysql月份前后格式变化记录

select DATE_FORMAT(2024-10-11 - INTERVAL 1 MONTH,%Y-%m) 一, DATE_FORMAT(2024-10-11,%Y-%m) 二, DATE_ADD(2024-10-11, INTERVAL 1 MONTH) 三 ,DATE_FORMAT(DATE_ADD(2024-10-11, INTERVAL 1 MONTH) ,%Y-%m) 四,REPLACE(DATE_FORMAT(DATE_ADD(2024-10-11, INTERVAL 1 MONT…