从一个数据库到另一个数据库的Python sqlite复制表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了从一个数据库到另一个数据库的Python sqlite复制表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1291字,纯文字阅读大概需要2分钟。
内容图文
我在Windows XP上将python 2.7与内置sqlite3模块一起使用.该代码如下所示:
#!/usr/bin/env python2
import sqlite3
import sys
def open_db(nam):
conn = sqlite3.connect(sys.argv[1])
# Let rows returned be of dict/tuple type
conn.row_factory = sqlite3.Row
print "Openned database %s as %r" % (nam, conn)
return conn
def copy_table(table, src, dest):
print "Copying %s %s => %s" % (table, src, dest)
sc = src.execute('SELECT * FROM %s' % table)
ins = None
dc = dest.cursor()
for row in sc.fetchall():
if not ins:
cols = tuple([k for k in row.keys() if k != 'id'])
ins = 'INSERT OR REPLACE INTO %s %s VALUES (%s)' % (table, cols,
','.join(['?'] * len(cols)))
print 'INSERT stmt = ' + ins
c = [row[c] for c in cols]
dc.execute(ins, c)
dest.commit()
src_conn = open_db(sys.argv[1])
dest_conn = open_db(sys.argv[2])
copy_table('audit', src_conn, dest_conn)
当我使用db_copy.py src.db dest.db运行此文件时,源数据库已加倍.因此,我将源文件属性设置为只读.我现在得到:
sqlite3.OperationalError: attempt to write a readonly database
似乎某处源数据库和目标数据库连接混合在一起?我已经调试了几个小时,没有找到原因.
解决方法:
您将忽略nam参数,并将sys.argv [1]用于对open_db()的所有调用:
def open_db(nam):
conn = sqlite3.connect(sys.argv[1])
这将两次打开第一个命名数据库,即src_conn和dest_conn.使用nam代替:
def open_db(nam):
conn = sqlite3.connect(nam)
内容总结
以上是互联网集市为您收集整理的从一个数据库到另一个数据库的Python sqlite复制表全部内容,希望文章能够帮你解决从一个数据库到另一个数据库的Python sqlite复制表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。