2017-09-05 462 views
0

我有我的本地机器和我的Web服务在SQLite数据库使用的SQLAlchemy这样它在同一台机器访问运行:我们计划举办一个单独的网络在线服务SQLite数据库的远程访问

engine = create_engine('sqlite:///{}'.format('mydatabase.db'), echo=True) 

来自数据库托管的机器。我们如何才能使这个'mydabata.db'可用于我们的Web服务的远程Web服务?谢谢。

回答

1

从SQLite的when to use文档:

情况下客户端/服务器RDBMS可能更

  • 客户/服务器应用

如果有发送许多客户端程序SQL通过网络连接到同一个数据库,然后使用客户端/服务器数据库引擎而不是SQLite。 SQLite将通过网络文件系统工作,但由于与大多数网络文件系统相关的延迟,性能不会太好。另外,文件锁定逻辑在很多网络文件系统实现中(在Unix和Windows上)都有问题。如果文件锁定无法正常工作,两个或多个客户端可能会尝试同时修改同一数据库的同一部分,从而导致损坏。因为这个问题是由底层文件系统实现中的错误引起的,所以SQLite没有办法阻止它。

一个好的经验法则是避免在直接访问同一数据库(不使用干预应用程序服务器)的情况下使用SQLite,并且同时通过网络从多台计算机访问。

SQLite适用于嵌入式系统或至少在同一台计算机上使用它。恕我直言,你将不得不迁移到更大的SQL解决方案之一,如PostgreSQL,MariaDBMySQL。如果您通过ORM(SQLAlchemy)生成了所有查询,那么迁移到另一个RDBMS将没有问题。但即使编写SQL查询也不会有太多问题,因为所有这些RDBMS都使用非常相似的方言(与微软的T-SQL不同)。而且由于SQLite是lite它只支持其他RDBMS支持的一个子集,所以应该没有问题。