首页 > 解决方案 > 可以指定路径以在 sqlalchemy 上使用 postgresql 创建数据库吗?

问题描述

我目前正在尝试使用 sqlalchemy 创建一个 postgresql 数据库,并希望在外部硬盘驱动器中创建这个数据库文件。我可以使用 sqlite3 来做到这一点,只需在将进入引擎的字符串之后添加路径即可:

# To create the tables we need these packages
import sqlalchemy as sql
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref
from sqlalchemy import create_engine 

# Creating the base.
Base = declarative_base()

# The tables would be defined here.

# Create an engine that stores data in the given directory.
path = '/path/'
engine = create_engine('sqlite:///'+path+'ARsdb.db')    

# Create all tables in the engine.
Base.metadata.create_all(engine)

然后将在指定路径内生成数据库文件。另一方面,postgresql 对引擎使用不同的语法:

# default
engine = create_engine('postgresql://user:pass@localhost/mydatabase')

# psycopg2
engine = create_engine('postgresql+psycopg2://user:pass@localhost/mydatabase')

正如在这个问题文档中所解释的那样。但是,我不清楚我是否可以为这个数据库文件指定一个路径,就像在 sqlite 上一样。当我使用数据库字符串创建数据库时:

postgresql://user:password@localhost:5432/databasepath/database_name

对于模拟数据库,我在databasepath路径中找不到database_name文件。我可以为要创建的文件指定一个路径,还是它们被限制在安装 postgresql 期间创建的服务器中?

谢谢!

标签: python-3.xpostgresqlsqlitesqlalchemy

解决方案


不,那是不可能的。

Postgres 将集群的所有数据库(又名“实例”)的数据存储在一个目录中,该目录是在创建 Postgres 实例期间指定的(通过)。initdb

此外,您无法通过连接来创建数据库。您需要先运行该create database命令,然后才能连接到它。


推荐阅读