我想从另一个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的完整路径不起作用。在插入数据之前创建表也不起作用。
答案 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)
在from matplotlib import pylab
pylab.plot(range(10), range(10))
pylab.pause(2**31-1)
语句中正确引用数据库对象标识符(表/列名称等)。使用double quotes而不是单个,这是用于字符串文字。更好的是,如果可能的话,不要在对象名称中使用短划线或其他受限制的字符(坚持使用字母数字和下划线)。
使用INSERT
代替exec()
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;