我有一个来自客户端的非标准化事件日记CSV,我正在尝试将其加载到MySQL表中,以便我可以重构为一种理智的格式.我创建了一个名为"CSVImport"的表,它为CSV文件的每一列都有一个字段.CSV包含99列,因此这本身就是一项非常艰巨的任务:
CREATE TABLE 'CSVImport' (id INT);
ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256);
...
ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256);
ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256);
Run Code Online (Sandbox Code Playgroud)
表中没有约束,并且所有字段都包含VARCHAR(256)值,但包含计数(由INT表示),是/否(由BIT表示),价格(由DECIMAL表示)和文本blurbs(由TEXT代表).
我试图将数据加载到文件中:
LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport;
Query OK, 2023 rows affected, 65535 warnings (0.08 sec)
Records: 2023 Deleted: 0 Skipped: 0 Warnings: 198256
SELECT * FROM CSVImport;
| NULL | NULL | NULL …
Run Code Online (Sandbox Code Playgroud) 我试图改变一个没有主键和auto_increment列的表.我知道如何添加主键列,但我想知道是否可以自动将数据插入主键列(我已经在DB中有500行并且想要给它们id,但我不想手动执行) .有什么想法吗?非常感谢.
我将一些包含20000行的数据从CSV文件导入到Mysql中.
CSV中的列与MySQL表的列的顺序不同.如何自动分配与Mysql表列对应的列?
当我执行
LOAD DATA INFILE'abc.csv' INTO TABLE abc
Run Code Online (Sandbox Code Playgroud)
此查询将所有数据添加到第一列.
请建议将数据导入Mysql的自动语法.
我有一个包含11列的CSV文件,我有一个包含9列的MySQL表.
CSV文件如下所示:
col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11
Run Code Online (Sandbox Code Playgroud)
和MySQL表看起来像:
col1, col2, col3, col4, col5, col6, col7, col8, col9
Run Code Online (Sandbox Code Playgroud)
我需要将CSV文件的1-8列直接映射到MySQL表的前8列.然后,我需要跳过CSV文件中的下两列,然后将CSV文件的第11列映射到MySQL表的第9列.
目前我正在使用以下SQL命令:
LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\n'
Run Code Online (Sandbox Code Playgroud)
但是上面的代码将CSV文件的前9列映射到MySQL表中的9列.
我为我的一个客户开发了一个应用程序.他已经有了一个.所以我需要将他的实际数据库(SQL Server)转换为新的数据库(MySQL).
SQL Server的某些表有超过10.000.000条记录.当我开始开发这个转换器时,我已经开始使用一些带有一些记录的表,所以我找到所有记录并保存到我的新MySQL数据库中.我将向您展示一些代码以便更好地理解(这只是一个例子)
<?php
namespace Converter\Model;
class PostConverter extends AbstractConverter
{
public function convert()
{
// this is the default connection, it is a mysql database (new application)
$em = $this->getEntityManager();
// this return an alternative connection to the sqlserver database (actual application)
$emAlternative = $this->getEntityManagerAlternative();
// instance of Converter\Repository\Post
$repository = $emAlternative->getRepository('Converter\Entity\Post');
$posts = $repository->findAll();
foreach ($posts as $post)
$post = new Post();
$post->setTitle($object->getTitle());
$em->persist($post);
}
$em->flush();
}
}
Run Code Online (Sandbox Code Playgroud)
现在让我们假设Post表有超过10.000.000条记录.我不能只找到所有并迭代它.我会离开RAM.所以我做了这样的事情.
存储库类:
<?php
namespace Converter\Repository;
class Posts extends \Doctrine\ORM\EntityRepository …
Run Code Online (Sandbox Code Playgroud) 我正在从两个需要加入的不同数据库中下载两个数据集.当我将它们存储为CSV时,它们中的每一个分别约为500MB.分别适合内存,但当我加载两个时,我有时会得到一个内存错误.当我尝试将它们与熊猫合并时,我肯定会遇到麻烦.
对它们进行外连接的最佳方法是什么,这样我就不会出现内存错误?我手头没有任何数据库服务器,但如果有帮助,我可以在我的计算机上安装任何类型的开源软件.理想情况下,我仍然只想在熊猫中解决它,但不确定这是否可行.
澄清一下:合并是指外连接.每个表都有两行:产品和版本.我想检查左表中的产品和版本,仅右表和两个表.我做了一个
pd.merge(df1,df2,left_on=['product','version'],right_on=['product','version'], how='outer')
Run Code Online (Sandbox Code Playgroud) mysql ×6
csv ×3
doctrine-orm ×1
import ×1
migration ×1
pandas ×1
php ×1
primary-key ×1
python ×1
sqlite ×1