python sqlite3多个数据库

时间:2019-05-23 14:13:41

标签: python sqlite multiple-databases

我有相同的数据数据分布在许多相同的数据库中。我想将所有这些数据合并到一个数据库中(超过一百万条记录)

我有捐赠数据库和接收数据库中的连接对象和游标对象,并一直在仔细跟踪它们。然后,我从捐赠数据库中进行[SELECT *…] 在fetchall中,尝试将其插入到存档中。这似乎可行,但是永远不会采用变量: […。 VALUES(557)]会加上557。但是[….VALUES(?)”(var_name))]永远无效。

import sqlite3

conn = sqlite3.connect ('small_no_sort_2')
c = conn.cursor()
conn_rec = sqlite3.connect ('may_22_2019_int_db')  # new database,,,table is first_table
c_rec = conn_rec.cursor()

def data_entry_col_three():
    c_rec.execute ("INSERT INTO first_table (column_five) VALUES   (?)", (var))
    conn_rec.commit()

c.execute ("SELECT column_five FROM first_table WHERE column_five > 1809200 and column_five < 1822000 ")
all_rows = c.fetchmany(15)
for row in all_rows:
    if (row[0]) > 1819700 and row[0]< 1822799:
        print (row[0])
        var = row[0]
        var = str(var)
        var = (var[0:7])
        var = int(var)
        print (type(var))
        print (".....")
        print (var)
        new_var = 2000
        data_entry_col_three()

请注意,我已经对数据类型有些困惑。 [data_entry_col_three]此函数将使用数字,而不是变量。 ……………….VALUES(33445)将起作用,但是……………………VALUES(?),”(var))无效。

2 个答案:

答案 0 :(得分:1)

使用SQL进行操作更容易,更有效。

打开目标数据库后,类似

ATTACH DATABASE 'source.db' AS source;
INSERT INTO main.first_table(column_five)
  SELECT column_five
  FROM source.first_table
  WHERE column_five BETWEEN 1819701 AND 1822798;
DETACH source;

将给定范围内的源表中的值插入目标表中。

答案 1 :(得分:0)

您的代码包含2个问题。

首先,execute需要一个序列作为其第二个参数。在这里,您传递的(var)不是根据Python内部解析的元组,而只是在值周围加上括号,因此您正在执行c_rec.execute ("INSERT INTO first_table (column_five) VALUES (?)", var)

您应该更改它,以强制将值视为带逗号的元组:

c_rec.execute ("INSERT INTO first_table (column_five) VALUES   (?)", (var,))

接下来,您仅处理15行(由于all_rows = c.fetchmany(15))。它们很可能都不符合以下if (row[0]) > 1819700 and row[0]< 1822799:,并且该代码什么也不做。立即修复:

all_rows = c.fetchall()

在修复了这2个之后,第二个数据库应该具有一些值...


话虽这么说,如果您要做的就是将值从一个数据库复制到另一个数据库,而无需任何其他处理,那么Shawn的解决方案肯定更易于维护...