【问题标题】:python sqlite3 multiple-databasespython sqlite3 多数据库
【发布时间】:2019-05-23 14:13:40
【问题描述】:

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

我有来自捐赠数据库和接收数据库的连接对象和游标对象,并且正在仔细跟踪它们。然后我正在从捐赠数据库中执行 [SELECT * ...] 和 在 fetchall 中,尝试将 INSERT INTO 归档。这似乎有效,但永远不会接受变量: […… 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))。

【问题讨论】:

    标签: python sqlite multiple-databases


    【解决方案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;
    

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

    【讨论】:

      【解决方案2】:

      您的代码包含 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]) &gt; 1819700 and row[0]&lt; 1822799:,并且该代码什么也不做。立即修复:

      all_rows = c.fetchall()
      

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


      话虽如此,如果您只想将值从一个数据库复制到另一个数据库而不进行任何处理,那么 Shawn 的解决方案肯定更易于维护......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-08
        相关资源
        最近更新 更多