2013-05-07 37 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使用您选择的远程数据库