python sqlite3,使用另一个表中的数据将行插入表中

时间:2013-09-29 08:10:45

标签: python insert sqlite

这有许多例子,但在所有情况下,我看到他们都知道字段(列)的名称。这两个表具有完全相同的列/字段。

我的解决方案已经解决了我当前的问题,但正如您从代码中看到的那样,它可能有资格获得“年度最荒谬的代码”奖。

# Copy data from one table to another in the same database
print '-' * 70
print 'Copy data from one table to another in the same database\n'
print '  Usefull for creating test data.'
print '-' * 70

import sqlite3

connection = sqlite3.connect("table.sqlite")
cursor = connection.cursor()

source_table = 'table1'
target_table = 'test_table1'

stmt = "SELECT * FROM %s" % source_table

cursor.execute(stmt)
data = cursor.fetchall()

for row in data:
    stmt = "insert into %s values " % target_table + str(row)
    stmt = stmt.replace("u'", '"')
    stmt = stmt.replace("'", '"')
    stmt = stmt.replace(' None', ' Null')
    cursor.execute(stmt)
    connection.commit()

connection.close()

必须有更好(更可靠)的方法来做到这一点。

1 个答案:

答案 0 :(得分:1)

使用cursor.executemany

import sqlite3

connection = sqlite3.connect("table.sqlite")
cursor = connection.cursor()

source_table = 'table1'
target_table = 'test_table1'

stmt = "SELECT * FROM %s" % source_table

cursor.execute(stmt)
data = cursor.fetchall()

fields = ','.join('?' for desc in cursor.description)
stmt = "insert into {} values ({})".format(target_table, fields)
cursor.executemany(stmt, data)
connection.commit()
connection.close()

使用cursor.description获取列数据。

注意

parameter marks因数据库模块而异。 sqlite3 模块使用qmark(?)。如果您使用其他数据库模块,则应该检查它。