Python使用DuckDB数据库

DuckDB 为什么这么快? 在我们的第二个管道中,我们对sale表进行了两次部分扫描,第一次扫描表的前半部分,第二次扫描表的后半部分。读取一行输入,第一个值保持不变,将输入的第二个和第三个值相加的结果 作为 输出中的第二个值 ,然后写出输出。最后,我谈到了 DuckDB 的并行模型:Morsel-Driven 并行支持跨任意数量核心的高效并行化,同时保持对多核处理的感知,从而有助于 DuckDB 的整体性能和效率。如果没有找到具有特定名称的表,我们会搜索具有该名称的其他实体,例如 Parquet 文件,直接对其执行查询。 阅读详情
AI摘要

本文介绍了如何在Python中安装和使用DuckDB,一个可嵌入的面向列的OLAP数据库,提供read_csv和read_jsonAPI,并展示了如何通过封装类简化操作,包括连接、写入、查询和关闭数据库连接的示例。,

以下为授权转载的一盎司科技公众号文章


DuckDB类似于SQLite,也被设计用作可嵌入的数据库,是面向列的可嵌入 OLAP 数据库。兼容主流操作系统,并可以在主流编程语言中使用。这里简单介绍在Python中使用DuckDB数据库。详细介绍可参考官方文档(http://duckdb.org/docs)。

示例代码地址:

GitHub地址:https://github.com/iounce/python-cpp-demo

Gitee地址:https://gitee.com/iounce_admin/python-cpp-demo

环境

  • Windows操作系统:Windows10(21H2,19044.1766)

  • C++开发环境:Visual Studio 2022社区版

  • Python:3.10.4

  • DuckDB: 0.8.1

安装DuckDB

在Python中使用,直接使用如下命令安装即可:

pip install duckdb

DuckDB库API

Python中使用DuckDB还是比较方便的,可以与CSV,JSON等文件结合,还可以与pandas的DataFrame进行输入输出转换。

常用API如下:

  • duckdb.read_csv: 从CSV文件获取数据;

  • duckdb.read_json: 从JSON文件获取数据;

  • duckdb.connect: 连接数据库,如果指定的数据库不存在则创建一个新的;

  • connection.execute:执行一条sql语句,如insert,select语句;

  • connection.sql:执行一条sql语句,类似connection.execute;

  • connection.fetchall:获取查询结果集的所有行数据,返回一个列表;

  • connection.close:关闭数据库连接。

DuckDB封装类

根据上述API,这里简单做个封装处理,接口类似上一篇SQLite,方便调用。

  • 构造函数__init__:增加数据库文件名的入参,并初始化变量等。

图片

  • 打开函数open():打开DuckDB连接,用于后续调用,这里加入异常判断。

图片

  • 写入函数insert()/insert_batch():根据设置好的SQL语句,执行写入操作,批量接口和单条一样,sql中增加多条语句即可。

图片

  • 查询函数query():调用API和insert()函数类似,都是execute接口,但是查询会调用fetch_all接口,用于返回结果。

图片

  • 执行函数execute():这里自定义的执行函数,其实为了方便封装create和delete函数,其实都是调用execute接口,只是方便调用者区分使用,其实调用insert()函数也可以。

图片

  • 关闭函数close():用于关闭连接,释放资源。

图片

示例代码

接下来,我们使用封装好的DuckDB类来编写测试代码,简单起见,直接写SQL语句调用。首先打开数据库,创建名为tb_test的表,然后写入测试数据,接着查询数据,最后关闭连接。

此处的示例与上一篇SQLite类似,只是sql脚本有些许差别。

图片

说明:

  • 这里DuckDB自增长需要使用sequence来实现,通过nextval('seq')函数获取唯一值;

  • insert语句中,表后面的字段无需加单引号(加了反而报错)。

这里只是简单介绍Python下的DuckDB的使用,可以根据需要继续完善封装类,更多用法也可以官方参考文档。

起飞了 ! 使用 DuckDB 的处理11 亿出租车出行数据 如果您想知道为什么我不运行基于 Linux 的桌面作为我的主要工作环境,我仍在使用 Nvidia GTX 1080 GPU,它在 Windows 上有更好的驱动程序支持,并且我时不时地使用 ArcGIS Pro仅原生支持 Windows。SSD 的写入速度为 50-150 MB/s,读取速度通常为 5-10 MB/s,而 CPU 几乎处于空闲状态,为 5-10%。因此,我将在更快的驱动器上运行基准测试,但我将在更便宜的驱动器上构建 Parquet 文件。它不依赖于自己的服务器,而是用作客户端。 阅读详情

相关推荐

最火数据库 DuckDB简介:数据分析的利器

DuckDB是一款新兴的高性能嵌入式SQL数据库,专为在线分析处理(OLAP)设计,被誉为"分析型的SQLite"。它采用列式存储和向量化查询引擎,显著提升了数据分析查询性能,支持标准SQL语法和多种数据格式导入。与SQLite相比,DuckDB更擅长处理大规模数据集的聚合和复杂计算,但不适合事务密集型场景。DuckDB安装简单,能与Python、R等语言深度集成,是数据分析师、科学家处理交互式分析、边缘计算等任务的理想工具。虽然存在单机运行、非事务型等局限,但其优异的性能和易用性使其成

四楼没电梯的专栏 4361

DuckDB:使用DuckDB进行Python数据分析指南

在本教程中,我们查看了如何使用DuckDB进行Python数据分析。我们使用了CSV文件。但你可以以相同的方式使用parquet和JSON文件以及关系数据库。所以,是的,DuckDB是分析Python中大型数据集的有用工具,也是你的Python数据分析工具箱中相当有用的补充。我建议在你的下一个数据分析项目中使用DuckDB。编码愉快!

Whoisbug的博客 2636

python-44-嵌入式数据库SQLite和DuckDB

SQLite是一个轻量级的数据库,它不需要单独的服务器进程,可以直接嵌入到Python程序中。DuckDB是一个进程内SQL OLAP数据库管理系统。

qq_20466211的博客 792

DuckDB全面挑战SQLite

如果查看 DuckDB 的网站,在其主页上看到的第一件事就是:DuckDB 是一个进程内 SQL OLAP 数据库管理系统。让我们尝试解读这句话,因为它包含相关信息。• 进程内 SQL 意味着 DuckDB 的功能在应用程序中运行,而不是在应用程序连接的外部进程中运行。换句话说:没有客户端发送指令,也没有服务器读取和处理它们。与 SQLite 的工作方式相同,而 PostgreSQL、MySQL……则不然。• OLAP 代表在线分析处理,微软将其定义为组织大型业务数据库并支持复杂分析的技术。

Rocky006的博客 7519

AD从原理图到PCB超详细教程

我在学习AD的时候,看了网上很多教程,但是东西很杂,有很多条理不清而且废话很多,所以相信大家学习的时候也是遇到一样的困难。我就特地写一篇帖子,整理了一下AD从画原理图开始一直到画完PCB文件的所有步骤,一方面是供大家参考学习,另一方面可以方便我自己学习记忆更加深刻。我用的版本是AD16中文版,大家用新的版本AD20或者AD22应该操作都是差不多的。

人生寂寞如雪 18万+

手把手教你用OPA运放和MOS管搭建恒流源电路(附完整电路图)

本文详细介绍了如何使用OPA运放和MOS管搭建高精度恒流源电路,涵盖核心元器件选型、电路设计、工作原理及实际搭建步骤。通过负反馈控制机制和MOS管工作区设置技巧,实现稳定的电流输出,适用于LED驱动、电池充电等场景。附完整电路图和调试技巧,助您快速掌握恒流源设计。

weixin_29239279的博客 535

DuckDB在Python中的基本使用

DuckDB具有极强的单机数据分析性能表现,功能丰富,具有诸多拓展插件,且除了默认的SQL查询方式外,还非常友好地支持在Python、R、Java、Node.js等语言环境下使用,特别是在Python中使用非常的灵活方便。

小龙在线 1777

STM32F407 FreeRTOS+LVGL移植实战:从驱动适配到性能优化

本文详细介绍了在STM32F407开发板上移植FreeRTOS和LVGL的实战经验,涵盖硬件准备、驱动适配、性能优化等关键步骤。通过TFTLCD屏幕驱动优化、DMA加速和任务优先级调整,显著提升界面流畅度,为嵌入式GUI开发提供实用解决方案。

weixin_29190651的博客 632

DuckDb数据库套壳使用教程-python套壳

本文介绍了DuckDb数据库的Python接口使用方法。主要内容包括:1) 启动方法:Windows用户双击start.bat,Linux用户执行start.sh;2) 提供4个REST API接口:执行SQL、导出数据库文件、加载数据库文件、从MySQL导入数据(支持单表和多表导入);3) 接口文档地址为http://127.0.0.1:28888/docs#。使用前需确保Python3环境,系统会自动下载所需依赖。文件下载地址附在文末。

weixin_47766420的博客 420

基于Python+OpenCV中文及符号检测

一、项目背景与意义在图像处理、文档识别、自动翻译等场景中,中文及符号的准确检测是一个重要且复杂的任务。传统的字符检测方法往往对英文等拉丁字母系的识别效果较好,但对中文及特殊符号的识别准确率较低。本项目旨在利用Python编程语言结合OpenCV库,开发一个能够高效、准确地检测图像中中文及符号的系统,为相关领域的研究和应用提供技术支撑。二、技术实现图像预处理:利用OpenCV的图像处理功能,对输入的图像进行灰度化、二值化、滤波去噪等预处理操作,以提高中文及符号检测的准确性[1]。

2301_79809972的博客 1119

MAX31855电路和程序,实现SPI和软件模拟时序两种方式读取数据

1. 概述 MAX31855为热电偶至数字输出转换器,内置14位模/数转换器(ADC)。器件带有冷端补偿检测和修正、数字控制器、SPI兼容接口,以及相关的控制逻辑,在温度控制器、过程控制或监测系统中设计用于配合外部微控制器(μC)工作。提供多个版本的器件,每个版本针对特定的热电偶类型(K、J、N、T或E型)进行优化和调整。热电偶类型以器件型号后缀表示(例如MAX31855K)。 器件输出14位...

睿思派克 1万+

Python 在数据库开发中的应用:DuckDB、SQLite 和 PostgreSQL 谁更适合大数据?

Python 提供了多种数据库选项,帮助开发者高效处理数据。DuckDB、SQLite 和 PostgreSQL 各具特色,分别适用于不同的应用场景。无论您是在探索新想法还是构建生产级系统,了解这些工具的特点都将有助于做出明智的选择。希望本文能够为您提供有价值的参考!如果您有任何疑问或建议,请随时留言交流。```

2501_91139740的博客 1764

元数据治理实战:构建企业数据地图与血缘体系

元数据(Metadata)是描述数据的数据,是你能了解“数据是怎么来的”、“它是做什么的”、“能不能用”的基础信息。📌 举个例子:order_idstringods_order定义:平台内用户在订单系统中产生的唯一订单编号更新时间:每天凌晨 2 点,由 Airflow 调度任务生成所属人:张三(数据开发部)🔍 这些信息本身不直接参与计算,但它们是数据可管理、可追踪、可评估的基础。模块实战建议元数据类型技术 + 业务 + 操作元数据三类统一治理治理路径。

晴天彩虹雨的博客 290

duckdb介绍

DuckDB 是一个开源的嵌入式分析型 SQL 数据库管理系统,专为高性能分析查询设计。其特点包括嵌入式运行、列式存储、无服务器架构和易于使用。DuckDB 直接运行在应用程序进程内,无需独立服务器,适合处理复杂查询和大规模数据分析,但不适合高频事务处理。它支持多种编程语言,并与数据科学工具如 Pandas 和 Apache Parquet 无缝集成。应用场景包括数据分析、数据仓库、嵌入式数据库、数据科学、IoT 和日志分析。安装简单,通过 pip 即可在 Python 环境中使用。示例代码展示了如何在 D

lagrahhn的博客 1235

git clone出现fatal: unable to access Failed to connect to github.com port 443: Timed out解决方案

本文主要介绍了git clone出现fatal: unable to access Failed to connect to github.com port 443: Timed out解决方案,希望能对使用git的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 23万+

S7-1200与ABB机器人进行SOCKET通信的具体方法示例

S7-1200与ABB机器人进行SOCKET通信的具体方法示例

Robot_PLC_HMI_Automation 3292

Python 嵌入式 OLAP 数据库:DuckDB

DuckDB 是一个近几年非常火的,你可以把它看作是。它特别适合在。

weixin_40203719的博客 1907

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Python DuckDB 详解:轻量级分析型数据库的革新实践

DuckDB作为新兴嵌入式分析型数据库,正在革新Python数据分析生态。其采用列式存储和向量化执行引擎,可实现比SQLite快3个数量级的查询速度,并支持零拷贝集成Pandas数据。文章详细解析了DuckDB的架构优势,包括内存管理优化、并行查询加速和机器学习集成,展示了其在处理TB级数据时的突破性表现。通过实践案例证明了DuckDB在云原生场景和特征工程中的高效应用,并提供了性能调优指南。作为2024年增速最快的数据库项目,DuckDB正引领分析型数据库的范式迁移,为开发者提供处理超大规模数据集的新能力

得塔云的博客 2553

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Python 数据库支持的最新动态:DuckDB、SQLite 和 PostgreSQL 谁更适合大数据?

随着 Python 社区的不断发展,数据库技术也在持续演进。无论是 DuckDB 的高效分析能力,还是 SQLite 的轻量化设计,亦或是 PostgreSQL 的企业级功能,每种工具都有其独特的优势。希望本文能够帮助您更好地理解这些数据库的特点,并为您的项目选择提供有价值的参考。```

2501_91164829的博客 635

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

速刷DuckDB官网24小时-掌握核心功法

duckdb是一个非常高级的数据处理工具,与pandas各类数据分析工具均可以无缝衔接。 本文带你快速掌握DuckDB的各种高级用法。

小小明-代码实体的专栏 5423
上一篇: Python使用SQLite数据库
下一篇: Tars微服务框架C++开发之Lua脚本
iounce
博客等级 码龄18年 3粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值