1

我有一个当前使用本地数据库的 sqlalchemy 应用程序。该应用程序的代码如下所示。

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

在解释中,他们提到了下面给出的行。

engine = create_engine('postgresql://scott:tiger@localhost:5432/mydatabase')

我的第一个问题是

1) sqlite 支持远程数据库创建吗?2)如何保持与远程机器的连接始终打开?我不想每次必须插入条目或进行查询时都启动 ssh 连接。

这些问题可能听起来很愚蠢,但我对 python 和 sqlalchemy 很陌生。感谢任何帮助。

4

2 回答 2

2

回答您的问题:

  1. SQLite 不支持远程数据库连接——你必须自己实现这个——比如将 sqlite 数据库文件放在由网络文件系统共享的地方,但这会使你的解决方案不太可靠
  2. 我的建议 - 不要尝试使用用户远程 sqlite 数据库,而是切换到传统的 RDBMS。请参阅下文了解更多详情。

听起来你的应用程序已经长满了 SQLite。现在是切换到使用开箱即用的网络连接支持的传统 RDBMS(如 MySQL 或 PosgreSQL)的好时机。

SQLite 是本地数据库。SQLite 有一个页面解释何时使用它。它说:

如果您有许多客户端程序通过网络访问公共数据库,则应考虑使用客户端/服务器数据库引擎而不是 SQLite。

好消息是您的应用程序可能与数据库无关,因为您使用 SQLAlchemy 生成查询。

所以我会做以下事情:

  • 将数据库系统安装到机器上(无论是本地还是远程,您都可以重复将数据库移动到远程机器上)并为您的用户配置权限(创建数据库、更改、选择、更新和插入)
  • 创建数据库架构并填充数据 - 克隆您现有的。有一些工具可用于这样做 - 即使用 SQLAlchemy sqlite 数据库跨平台复制数据库。
  • 从使用 sqlite 更新应用程序中的 db 连接字符串以使用您选择的远程数据库
于 2013-05-08T14:46:07.877 回答
0

时代变了。

如果希望通过 Web 提供 SQLite 数据库,一种选择是使用 CubeSQL 作为服务器,使用 SQLiteManager for SQLite 作为其客户端。有关详细信息,请参见例如https://www.sqlabs.com/

另一种选择可能是类似地使用 Valentina Server:请参阅https://www.valentina-db.com/en/valentina-server-overview

(这些选项可能仅适用于一次最多有一个客户端具有写访问权限的情况。)

还有其他人吗?

于 2019-10-14T11:40:02.833 回答