小编Cha*_*lie的帖子

加快从熊猫数据帧到MySQL的数据插入

我需要使用sqlalchemy和python将60000x24数据帧插入mysql数据库(MariaDB)。数据库在本地运行,数据插入也在本地运行。目前,我一直在使用LOAD DATA INFILE sql查询,但这需要将数据帧转储到CSV文件中,这大约需要1.5-2秒。问题是我必须插入40个或更多这些数据帧,所以时间很关键。

如果我使用df.to_sql,则问题会变得更加严重。每个数据帧数据插入至少需要7(最多30)秒。

下面提供了我正在使用的代码:

sql_query ="CREATE TABLE IF NOT EXISTS table(A FLOAT, B FLOAT, C FLOAT)"# 24 columns of type float
cursor.execute(sql_query)
data.to_sql("table", con=connection, if_exists="replace", chunksize=1000)
Run Code Online (Sandbox Code Playgroud)

这需要7到30秒才能执行。使用LOAD DATA,代码如下所示:

sql_query = "CREATE TABLE IF NOT EXISTS table(A FLOAT, B FLOAT, C FLOAT)"# 24 columns of type float
cursor.execute(sql_query)
data.to_csv("/tmp/data.csv")
sql_query = "LOAD DATA LOW_PRIORITY INFILE '/tmp/data.csv' REPLACE INTO TABLE 'table' FIELDS TERMINATED BY ','; "
cursor.execute(sql_query)
Run Code Online (Sandbox Code Playgroud)

这需要1.5到2秒的时间,主要是由于将文件转储为CSV。我可以通过使用LOCK TABLES来改善最后一点,但是没有数据添加到数据库中。因此,我的问题是,是否有任何方法可以通过调整LOAD DATA或to_sql来加快此过程?

更新: 通过使用替代函数将数据帧转储到此答案给出的CSV文件中,什么是将大型DataFrame输出到CSV文件的最快方法? 我可以提高一点性能,但并不能显着提高。最好,

python mysql performance mariadb pandas

7
推荐指数
1
解决办法
358
查看次数

无法使用 qextserialport 声明串口

我已经看到了几个问题并在谷歌上搜索了很多,但我找不到使用 qextserialport 声明串行端口对象的方法,以便从 arduino 读取和写入。我尝试了用户在How to write on serial port using Qextserialport 中所做的尝试,但编译器给了我以下错误:

undefined reference to `QextSerialPort::QextSerialPort(QString const&, QextSerialPort::QueryMode, QObject*)'
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QtExtSerialPort/qextserialport.h>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_BTN_Connect_clicked()
{

    int index=ui->Selector_Port->currentIndex();
    QextSerialPort *port = new QextSerialPort("/dev/ttyACM0");
}
Run Code Online (Sandbox Code Playgroud)

为什么会出现这个错误?我使用的是 Debian 8.2 和 QT 4.8.6

编辑: 添加行后:

CONFIG += qesp_linux_udev
QT += extserialport
Run Code Online (Sandbox Code Playgroud)

到项目文件,我遇到以下错误:

"Project MESSAGE: Warning: unknown QT: extserialport"
Run Code Online (Sandbox Code Playgroud)

c++ qt serial-port qextserialport

0
推荐指数
1
解决办法
726
查看次数

标签 统计

c++ ×1

mariadb ×1

mysql ×1

pandas ×1

performance ×1

python ×1

qextserialport ×1

qt ×1

serial-port ×1