2014-05-06 68 views
0

首先讓我首先要說,我有點新的SQL(但一直在做的蟒蛇很長一段時間)。我一直無法找到一個很好的解決方案,我的問題在網上。多個相同的數據庫

問題:

我有一個未定義的數字(雖然可能小於100),我需要進行查詢和從合併的結果相同結構的SQLite數據庫中。數據庫本身並不是特別龐大。

我一直在尋找ATTACH命令並在本教程以下幾件事: http://souptonuts.sourceforge.net/readme_sqlite_tutorial.html

import sqlite3 as lite 
Database = "library.db" 
con = lite.connect(Database) 
con.row_factory = lite.Row 
cur = con.cursor() 
cur.execute("ATTACH DATABASE 'library.db' As 'db1'") 
cur.execute("ATTACH DATABASE 'library2.db' As 'db2'") 

cur.execute(""" 
      SELECT 'db1',* FROM db1.table 
      UNION 
      SELECT 'db2',* FROM db2.table 
      """) 

但是看起來應該有比在執行命令明確拼出每個數據庫更好的方法。另外,它看起來像我可以附加到數據庫的數量有限制? https://sqlite.org/limits.html

我也看到這樣合併在一起成爲一個龐大的數據庫: How can I merge many SQLite databases? 但似乎效率低下合併每個查詢需要進行一次或許多單獨的數據庫的一個數據庫一起得到改變。

之前,我繼續了一些道路,我想知道是否有這種類型的,我是不知道的東西更好的選擇嗎?關於該項目的


其它潛在有用的信息:

  • 主要有兩個表。
  • 從分貝到DB中的表可以有重複。
  • 我需要能夠搶在列的唯一值的「合併」的數據庫。該數據庫中的哪些是從哪裏來的數據
  • 不知道是不是必需的。
  • 個人數據庫更新頻繁。
  • 經常對「合併」數據庫進行查詢。
+0

好像你有很多在這些數據的數據庫,並且讓它們保持稀疏,因爲您希望避免多個進程爭奪文件的寫入權限。也許是時候遷移到像PostgreSQL這樣全功能的DBMS,並且有一個可以處理多個寫客戶端的數據庫? – ElmoVanKielmo

+0

sqlite的唯一原因是因爲這是數據庫的默認格式。它們可以在沒有太多麻煩的情況下更改爲Postgre,但所有數據庫都必須保留爲單個數據庫(由不同位置的個人維護)。我沒有任何控制權,所以不幸的是我只能訪問它們(複製,查詢等) –

回答

0

你可能避免拼寫在每個查詢出所有的數據庫,通過使用訪問量:

CREATE VIEW MyTable_all AS 
SELECT 'db1', db1.* FROM db1.MyTable 
UNION ALL 
SELECT 'db2', db2.* FROM db1.MyTable 
... 

但是,如果有太多的數據庫,則無法使用附加。 在這種情況下,您必須將所有數據庫合併到一起。

如果做了所有數據庫每次太慢,那麼您可以根據源爲每個記錄在一個時間同步單個數據庫:

DELETE FROM MyTable WHERE SourceDB = 1; 
INSERT INTO MyTable SELECT 1, * FROM db1.MyTable; 
相關問題