DuckDB简单使用及Python操作
DuckDB简介#
DuckDB是一款开源免费类似Sqlite的嵌入式数据库,支持直接使用内存或单个文件作为数据库。
DuckDB着重于数据处理和分析,是一个款OLAP(联机分析处理)类型的数据库,主要特点如下:
- 开源免费,MIT协议
- 功能完善,支持标准SQL、事务、二级索引等
- 高性能,低消耗(内存 / 文件占用小)
- 灵活的扩展机制,可以直接冲CSV / JSON / MySQL 等读取数据
- 支持Python / Java / Go / C / C++ / Nodejs / Rust 等主流编程语言,并提供命令行工具
DockDB安装#
DockDB直接下载一个duckdb可执行文件,然后运行即可。
启动方式有两种
- 使用内存作为数据库,直接运行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,回车即可执行
- 使用文件作为数据库,文件不存在则自动创建
$ ./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 duckdb
con = 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 duckdb
con = 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, '中文')
作者:韩志超
出处:https://www.cnblogs.com/superhin/p/18408042/duckdb_with_python
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
如有问题,请微信联系 superz-han,并发送原文链接。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)