php sqlite - 将表复制到另一个数据库

时间:2016-09-07 17:59:09

标签: php sqlite

我想从另一个db文件复制表但是我失败了,我无法理解。这是我的代码:

 $db = new SQLite3($_SERVER['DOCUMENT_ROOT']."/db/098765.db");
 $sql = "ATTACH DATABASE 'admin.db' AS admin ;
         INSERT INTO 'table-1' SELECT * FROM 'admin.table-1';";
 $db->query($sql);

我已经在本网站上阅读了有关此主题的所有问题,但没有回答对我有帮助。

提供ATTACH DATABASE的完整路径不起作用。在插入数据之前创建表也不起作用。

3 个答案:

答案 0 :(得分:1)

sqlite3命令行工具有一个名为.dump的便捷命令,可以使此任务变得微不足道:

sqlite3 admin.db '.dump "table-1"' | sqlite3 098765.db

这将创建表,所有相关索引,当然它将复制所有数据。

编辑:要获得更通用的解决方案,请按以下步骤创建一个shell脚本(我们称之为copy-table.sh):

#!/bin/bash
$src_db="$1"
$dst_db="$2"
$table="$3"

sqlite3 "$src_db" ".dump \"$table\"" | sqlite3 "$dst_db"

然后您可以按如下方式执行脚本

./copy-table.sh 'admin.db' '098765.db' 'table-1'

显然,您可以随意执行脚本,例如:来自cron或来自php。

答案 1 :(得分:0)

  1. from matplotlib import pylab pylab.plot(range(10), range(10)) pylab.pause(2**31-1) 语句中正确引用数据库对象标识符(表/列名称等)。使用double quotes而不是单个,这是用于字符串文字。更好的是,如果可能的话,不要在对象名称中使用短划线或其他受限制的字符(坚持使用字母数字和下划线)。

  2. 使用INSERT代替exec()

  3. query()

答案 2 :(得分:0)

您可以通过执行以下一组SQL语句来获取表的准确副本:

(在连接到目标数据库的情况下)

attach '<source-db-full-name>' as sourceDb;
select sql from 'sqlite_master' where type = 'table' and name = '<name-of-table>';

// Execute result of previous statement. 
// It will create empty table with 
// schema identical to schema of source table

insert into '<name-of-table>' select * from sourceDb.[<name-of-table>];
detach sourceDb;