簡體   English   中英

python sqlite3多個數據庫

[英]python sqlite3 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)無效。

在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個問題。

首先, 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)

您應該更改它,以強制將值視為帶逗號的元組:

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: ,則它們可能都不符合以下if (row[0]) > 1819700 and row[0]< 1822799:該代碼什么也不做。 立即修復:

all_rows = c.fetchall()

在修復了這2個之后,第二個數據庫應該具有一些值...


話雖這么說,如果您要做的就是將值從一個數據庫復制到另一個數據庫,而無需任何其他處理,那么Shawn的解決方案肯定更易於維護...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM