当前位置: 首页 > 面试题库 >

通过PHP将CSV文件导入SQLite数据库

薛淮晨
2023-03-14
问题内容

我想通过可手动运行以更新数据的PHP脚本将表格从CSV文件导入SQLite DB。

以下是我要实现的目标的列表:

  1. 将旧表(称为“ produkte”)重命名为product-currentdate(或删除表)
  2. 然后从CSV文件导入文件(;分隔并使用ISO 8859-1字符集/ CSV文件的第一行包含表标题)
  3. 将日期保存在表“产品”中

我发现了一个由于某种原因无法运行的脚本:

<?php
 $dir = 'sqlite:test.sqlite';
 $dbh  = new PDO($dir) or die("cannot open the database");


 $query = <<<eof
  LOAD DATA LOCAL INFILE 'produkte.csv'
  INTO TABLE produkte
  FIELDS TERMINATED BY ';'
  OPTIONALLY ENCLOSED BY '"' 
  LINES TERMINATED BY '\n'
  IGNORE 1 LINES 
  (id, Hauptmenue, Produktgruppe, Beschreibung, Text, Bild, Shop, Info)

 eof;

 $dbh->query($query);

?>

我希望有人知道如何解决我的问题…

最好的问候戴夫


问题答案:

Federico
Cingolani
在Github上发布了一个可以满足您需求的php脚本

 <?php
function import_csv_to_sqlite(&$pdo, $csv_path, $options = array())
{
    extract($options);

    if (($csv_handle = fopen($csv_path, "r")) === FALSE)
        throw new Exception('Cannot open CSV file');

    if(!$delimiter)
        $delimiter = ',';

    if(!$table)
        $table = preg_replace("/[^A-Z0-9]/i", '', basename($csv_path));

    if(!$fields){
        $fields = array_map(function ($field){
            return strtolower(preg_replace("/[^A-Z0-9]/i", '', $field));
        }, fgetcsv($csv_handle, 0, $delimiter));
    }

    $create_fields_str = join(', ', array_map(function ($field){
        return "$field TEXT NULL";
    }, $fields));

    $pdo->beginTransaction();

    $create_table_sql = "CREATE TABLE IF NOT EXISTS $table ($create_fields_str)";
    $pdo->exec($create_table_sql);

    $insert_fields_str = join(', ', $fields);
    $insert_values_str = join(', ', array_fill(0, count($fields),  '?'));
    $insert_sql = "INSERT INTO $table ($insert_fields_str) VALUES ($insert_values_str)";
    $insert_sth = $pdo->prepare($insert_sql);

    $inserted_rows = 0;
    while (($data = fgetcsv($csv_handle, 0, $delimiter)) !== FALSE) {
        $insert_sth->execute($data);
        $inserted_rows++;
    }

    $pdo->commit();

    fclose($csv_handle);

    return array(
            'table' => $table,
            'fields' => $fields,
            'insert' => $insert_sth,
            'inserted_rows' => $inserted_rows
        );

}


 类似资料:
  • 问题内容: 我想通过php将MYSQL数据导出到Excel / CSV。这样我以后可以使用我的数据库,或者有人可以使用和理解它。 问题答案: 我想这就是你要找的 您可以通过检查以下地址来创建自己的文件:http : //www.programmingfacts.com/export-mysql-data-into- excelcsv-via-php/ 我不能在这里添加工作代码,这是错误的= / 但

  • 本文向大家介绍php将csv文件导入到mysql数据库的方法,包括了php将csv文件导入到mysql数据库的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php将csv文件导入到mysql数据库的方法。分享给大家供大家参考。具体分析如下: 本程序实现数据导入原理是先把csv文件上传到服务器,然后再通过php的fopen与fgetcsv文件把数据保存到数组,然后再用while把数据一

  • 问题内容: 我有这样的.csv文件数据 我正在使用以下代码将数据插入数据库 但是什么也没插入;错误在哪里? 问题答案: 如果执行该操作,您会发现查询语法不正确,原因如下: 文件名应该用引号而不是反引号引起来,因为它是字符串文字而不是标识符。 绝对不需要调用在and 和子句中指定分隔符。 您过度使用了反引号。实际上,在您的情况下,由于没有使用保留字,因此请放弃所有保留字。它们只会增加混乱。 在CSV

  • 想要知道更多东西吗?当你需要从表中查找某些值时,可以使用冗长的 case 语句或 selectors 实现,但更整洁的方式是使用 extlookup 函数实现。 在 puppetmaster 上可以使用 extlookup 函数查询外部的 CSV 文件,并返回匹配的数据片段。 将所有数据组织到一个单一的文件并将它从 Puppet 配置清单中分离出来, 可以使维护工作变得更简单,也便于与其他人分享:

  • 问题内容: $ sqlite3 test.sql SQLite version 3.6.12 Enter “.help” for instructions Enter SQL statements terminated with a “;” sqlite> create table test (id integer, author_id integer, title varchar(128), n

  • Python是如何将CSV文件读入pandas数据帧的(我可以使用它进行统计操作,可以有不同类型的列,等等)? 我的CSV文件有以下内容: 在R中,我们将使用以下方法读取此文件: 这将返回一个R数据。框架: 有没有类似python的方法来获得相同的功能?