2013-05-07 40 views
1

我有一個當前使用本地數據庫的sqlalchemy應用程序。該應用程序的代碼如下所示。通過sqlite在sql alchemy中創建遠程數據庫

log = core.getLogger() 

engine = create_engine('sqlite:///nwtopology.db', echo=False) 
Base = declarative_base() 
Session = sessionmaker(bind=engine) 
session = Session() 

class SourcetoPort(Base): 
    """""" 
    __tablename__ = 'source_to_port' 
    id = Column(Integer, primary_key=True) 
    port_no  = Column(Integer) 
    src_address = Column(String,index=True) 

    #----------------------------------------- 
    def __init__(self, src_address,port_no): 
     """""" 
     self.src_address = src_address 
     self.port_no  = port_no 

我想在遠程機器上創建數據庫本身。我遇到了這個文檔。 http://www.sqlalchemy.org/doc_pdfs/sqlalchemy_0_6_3.pdf

在解釋中他們提到了下面的幾行。

發動機= create_engine(」的PostgreSQL://斯科特:虎@本地:5432/MyDatabase的」)

我的第一個問題是

1)不支持的SQLite遠程數據庫創建? 2)如何保持與遠程機器的連接始終打開?我不想每次需要插入條目或進行查詢時發起ssh連接。

這些問題可能聽起來很愚蠢,但我對python和sqlalchemy很陌生。任何幫助表示讚賞。

回答

2

回答您的問題:

  1. SQLite不支持遠程數據庫的連接 - 你必須自己來實現這一點 - 就像把SQLite數據庫文件通過網絡文件系統共享,但它會使您的解決方案不太可靠
  2. 我的建議 - 不要嘗試使用用戶遠程sqlite數據庫,但切換到傳統的RDBMS。請參閱下面的更多細節。

聽起來像你的應用程序已經長滿了SQLite。現在是切換到使用傳統RDBMS(如MySQL或PosgreSQL)的好時機,其中網絡連接支持開箱即用。

SQLite是本地數據庫。 SQLite有a page explaining何時使用它。它說:

如果訪問共同數據庫在 網絡許多客戶端程序,你應該考慮使用一個客戶端/服務器數據庫引擎 而不是SQLite的。

好處是您的應用程序可能與數據庫無關,因爲您正在使用SQLAlchemy來生成查詢。

所以我會做到以下幾點:

  • 安裝數據庫系統到機器(也不要緊 - 本地或遠程 ,你總是可以重複移動數據庫到遠程機器),並配置權限您用戶(創建數據庫,修改,選擇,更新和插入)
  • 創建數據庫模式並填充數據 - 克隆現有的數據庫。有一些工具可用於這樣做 - 即Copying Databases across Platforms with SQLAlchemy sqlite數據庫。
  • 更新您的應用程序中的數據庫連接字符串使用sqlite使用您選擇的遠程數據庫