54、MySQL数据库与MATLAB的数据交互:导入与插入操作详解

MySQL数据库与MATLAB的数据交互:导入与插入操作详解

1. sqlread函数:从MySQL数据库表导入数据到MATLAB

1.1 语法

  • data = sqlread(conn,tablename) :从MySQL数据库表将数据导入到MATLAB并返回一个表,等同于执行 SELECT * FROM tablename 的SQL语句。
  • data = sqlread(conn,tablename,opts) :使用 SQLImportOptions 对象自定义从数据库表导入数据的选项。
  • data = sqlread( ___ ,Name,Value) :使用一个或多个名称 - 值对参数指定额外选项。
  • [data,metadata] = sqlread( ___ ) :还返回包含导入数据元信息的元数据表。

1.2 输入参数

参数 描述 类型
conn MySQL原生接口数据库连接 连接对象
tablename 数据库表名 字符向量或字符串标量
opts 数据库导入选项 SQLImportOptions 对象

1.3 名称 - 值对参数

参数 描述 类型 示例
Catalog 数据库目录名 字符向量或字符串标量 'Catalog','toy_store'
MaxRows 要返回的最大行数 正数值标量 'MaxRows',10
VariableNamingRule 变量命名规则 "preserve" (默认)或 "modify" 'VariableNamingRule',"modify"

1.4 输出参数

参数 描述 类型
data 导入的数据
metadata 元信息

1.5 示例

1.5.1 使用MySQL原生接口从数据库表导入数据
datasource = "MySQLNative";
username = "root";
password = "matlab";
conn = mysql(datasource,username,password);
tablename = "productTable";
data = sqlread(conn,tablename);
head(data,3)
close(conn)
1.5.2 使用导入选项从数据库表导入数据
datasource = "MySQLNative";
username = "root";
password = "matlab";
conn = mysql(datasource,username,password);
patients = readtable("patients.xls");
tablename = "patients";
sqlwrite(conn,tablename,patients)
opts = databaseImportOptions(conn,tablename)
vars = opts.SelectedVariableNames;
varOpts = getoptions(opts,vars)
opts = setoptions(opts,{'Gender','Location','SelfAssessedHealthStatus'}, 'Type','categorical');
opts = setoptions(opts,'Smoker','Type','double');
varOpts = getoptions(opts,{'Gender','Location','Smoker', 'SelfAssessedHealthStatus'})
data = sqlread(conn,tablename,opts);
tail(data)
summary(data)
sqlquery = strcat("DROP TABLE ",tablename);
execute(conn,sqlquery)
close(conn)
1.5.3 限制导入数据的行数
datasource = "MySQLNative";
username = "root";
password = "matlab";
conn = mysql(datasource,username,password);
tablename = "productTable";
data = sqlread(conn,tablename,'MaxRows',10);
data(1:3,:)
data.productDescription(1:3)
column = "productDescription";
data = sortrows(data,column);
data.productDescription(1:3)
close(conn)
1.5.4 检索导入数据的元信息
datasource = "MySQLNative";
username = "root";
password = "matlab";
conn = mysql(datasource,username,password);
outages = readtable("outages.csv");
tablename = "outages";
sqlwrite(conn,tablename,outages, 'ColumnType',["varchar(120)","datetime","numeric(38,16)", "numeric(38,16)","datetime","varchar(150)"]);
[data,metadata] = sqlread(conn,tablename);
metadata.Properties.RowNames
metadata.VariableType
metadata.FillValue
metadata.MissingRows
index = metadata.MissingRows{5,1};
nullrestoration = data(index,:);
head(nullrestoration)
sqlstr = "DROP TABLE ";
sqlquery = strcat(sqlstr,tablename);
execute(conn,sqlquery)
close(conn)

1.6 限制

  • 使用 'VariableNamingRule' 名称 - 值对参数与 SQLImportOptions 对象 opts 时, sqlread 函数会返回错误。
  • 'VariableNamingRule' 名称 - 值对参数设置为 'modify' 时:
  • 变量名 Properties RowNames VariableNames 是表数据类型的保留标识符。
  • 每个变量名的长度必须小于 namelengthmax 返回的数字。

1.7 MySQL数据类型与MATLAB数据类型映射

MySQL数据类型 MATLAB数据类型
BIT logical
TINYINT double
SMALLINT double
BIGINT double
REAL double
DOUBLE double
DECIMAL double
NUMERIC double
CHAR string
VARCHAR string
LONGVARCHAR string
TIMESTAMP datetime
DATE datetime
TIME duration
YEAR double
ENUM categorical
JSON char

1.8 元数据表变量

变量名 变量描述 变量数据类型
VariableType 导入数据中每个变量的数据类型 字符向量的元胞数组
FillValue 导入数据中每个变量的缺失数据值 缺失数据值的元胞数组
MissingRows 导入数据中每个变量的缺失数据的索引 数值索引的元胞数组

1.9 流程图

graph TD;
    A[创建数据库连接] --> B[指定表名];
    B --> C{是否使用选项};
    C -- 是 --> D[使用SQLImportOptions对象或名称 - 值对];
    C -- 否 --> E[直接导入数据];
    D --> E;
    E --> F[获取导入数据];
    F --> G{是否需要元信息};
    G -- 是 --> H[获取元信息];
    G -- 否 --> I[结束];
    H --> I;

2. sqlwrite函数:将MATLAB数据插入到MySQL数据库表

2.1 语法

  • sqlwrite(conn,tablename,data) :将MATLAB表中的数据插入到数据库表中。如果表已存在,则将MATLAB表中的数据作为行追加到现有数据库表中;如果表不存在,则创建一个具有指定表名的新表,并将数据作为行插入到新表中。
  • sqlwrite(conn,tablename,data,Name,Value) :使用一个或多个名称 - 值对参数指定额外选项。

2.2 输入参数

参数 描述 类型
conn MySQL原生接口数据库连接 连接对象
tablename 数据库表名 字符向量或字符串标量
data 要插入的数据
2.2.1 MATLAB表中的有效数据类型
  • 数值数组:可以包含 int8 uint8 int16 uint16 int32 uint32 int64 uint64 single double 等数据类型。
  • 数值数组的元胞数组
  • 字符向量的元胞数组
  • 字符串数组
  • 日期时间数组
  • 持续时间数组
  • 逻辑数组
  • 逻辑数组的元胞数组
2.2.2 日期和时间数据的支持格式
  • 日期: 'yyyy-MM-dd'
  • 时间: 'hh:mm:ss'
  • 时间戳: 'yyyy-MM-dd HH:mm:ss'

2.3 名称 - 值对参数

参数 描述 类型 示例
Catalog 数据库目录名 字符向量或字符串标量 'Catalog','toy_store'
ColumnType 数据库列类型 字符向量、字符串标量、字符向量的元胞数组或字符串数组 'ColumnType',["numeric" "varchar(400)"]

2.4 示例

2.4.1 使用MySQL原生接口将数据追加到现有表中
datasource = "MySQLNative";
username = "root";
password = "matlab";
conn = mysql(datasource,username,password);
tablename = "productTable";
rows = sqlread(conn,tablename);
tail(rows,3)
data = table(30,500000,1000,25,"Rubik's Cube", 'VariableNames',["productNumber" "stockNumber" "supplierNumber" "unitCost" "productDescription"]);
sqlwrite(conn,tablename,data)
rows = sqlread(conn,tablename);
tail(rows,4)
close(conn)
2.4.2 将数据插入到新表中
datasource = "MySQLNative";
username = "root";
password = "matlab";
conn = mysql(datasource,username,password);
data = table([30;40],[500000;600000],[1000;2000],[25;30], ["Rubik's Cube";"Doll House"],'VariableNames',["productNumber" "stockNumber" "supplierNumber" "unitCost" "productDescription"]);
tablename = "toyTable";
sqlwrite(conn,tablename,data)
rows = sqlread(conn,tablename)
close(conn)
2.4.3 插入数据到新表时指定列类型
datasource = "MySQLNative";
username = "root";
password = "matlab";
conn = mysql(datasource,username,password);
data = table([30;40],[500000;600000],[1000;2000],[25;30], ["Rubik's Cube";"Doll House"],'VariableNames',["productNumber" "stockNumber" "supplierNumber" "unitCost" "productDescription"]);
tablename = "toyTable";
coltypes = ["numeric" "numeric" "numeric" "numeric" "varchar(255)"];
sqlwrite(conn,tablename,data,'ColumnType',coltypes)
rows = sqlread(conn,tablename)
close(conn)

2.5 数据类型匹配

2.5.1 现有表的数据类型匹配
MATLAB表变量的数据类型 现有数据库列的数据类型
数值数组或数值数组的元胞数组 INTEGER SMALLINT DECIMAL NUMERIC FLOAT REAL DOUBLE PRECISION
字符向量的元胞数组、字符串数组、日期时间数组或持续时间数组 DATE TIME TIMESTAMP
逻辑数组或逻辑数组的元胞数组 BIT
字符向量的元胞数组或字符串数组 CHAR VARCHAR
2.5.2 新表的数据类型匹配
MATLAB表变量的数据类型 数据库列的默认数据类型
int8 数组 TINYINT
int16 数组 SMALLINT
int32 数组 INTEGER
int64 数组 BIGINT
逻辑数组 BIT
single double 数组 NUMERIC
日期时间数组 TIMESTAMP
持续时间数组 TIME
字符向量的元胞数组或字符串数组 VARCHAR

2.6 接受的缺失数据

MATLAB表变量的数据类型 数据库列的数据类型 接受的缺失数据
日期时间数组 日期或时间戳 NaT
持续时间数组 时间 NaN
double single 数组或 double single 数组的元胞数组 数值 NaN [] ''
字符向量的元胞数组 日期或时间戳 'NaT' ''
字符向量的元胞数组 时间 'NaN' ''
字符向量的元胞数组 Char Varchar 或其他文本数据类型 ''
字符串数组 日期或时间戳 "" "NaT" missing
字符串数组 时间 "" "NaN" missing
字符串数组 Char Varchar 或其他文本数据类型 missing

2.7 流程图

graph TD;
    A[创建数据库连接] --> B[指定表名和数据];
    B --> C{表是否存在};
    C -- 是 --> D[追加数据];
    C -- 否 --> E[创建新表并插入数据];
    D --> F{是否使用额外选项};
    E --> F;
    F -- 是 --> G[使用名称 - 值对参数];
    F -- 否 --> H[结束];
    G --> H;

综上所述, sqlread sqlwrite 函数为MATLAB与MySQL数据库之间的数据交互提供了强大而灵活的工具。通过合理使用这些函数及其相关选项,可以方便地实现数据的导入和插入操作,同时处理各种数据类型和缺失数据情况。在实际应用中,根据具体需求选择合适的函数和参数,能够高效地完成数据库与MATLAB之间的数据传输和处理任务。

【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器的建模仿真展开,重点介绍了基于Matlab的飞行器动力学模型构建控制系统设计方法。通过对四轴飞行器非线性运动方程的推导,建立其在三维空间中的姿态位置动态模型,并采用数值仿真手段实现飞行器在复杂环境下的行为模拟。文中详细阐述了系统状态方程的构建、控制输入设计以及仿真参数设置,并结合具体代码实现展示了如何对飞行器进行稳定控制轨迹跟踪。此外,文章还提到了多种优化控制策略的应用背景,如模型预测控制、PID控制等,突出了Matlab工具在无人机系统仿真中的强大功能。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校学生、科研人员及从事无人机系统开发的工程师;尤其适合从事飞行器建模、控制算法研究及相关领域研究的专业人士。; 使用场景及目标:①用于四轴飞行器非线性动力学建模的教学科研实践;②为无人机控制系统设计(如姿态控制、轨迹跟踪)提供仿真验证平台;③支持高级控制算法(如MPC、LQR、PID)的研究对比分析; 阅读建议:建议读者结合文中提到的Matlab代码仿真模型,动手实践飞行器建模控制流程,重点关注动力学方程的实现控制器参数调优,同时可拓展至多自由度或复杂环境下的飞行仿真研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值