Python - 如何将 SQLAlchemy 连接到内存中的现有数据库

wal*_*man 7 python sqlite sqlalchemy

我正在从现有的 shema 创建数据库,并将其存储在:memory:.

db = Database(filename=':memory:', schema='schema.sql')
db.recreate()
Run Code Online (Sandbox Code Playgroud)

我现在想将其“链接”到 SQL Alchemy。遵循了不同的方法,但无法得到正确的结果。

我目前的尝试如下:

engine = create_engine('sqlite:///:memory:')

Base = automap_base()
Base.prepare(engine, reflect=True)
User = Base.classes.user

session = Session(engine)
Run Code Online (Sandbox Code Playgroud)

就像我尝试过的其他东西一样,这会抛出AttributeError: user

我怎样才能一起完成这项工作?

Raf*_*ffi 9

文档的相关部分位于: https: //sqlite.org/inmemorydb.html

如果使用的:memory:话每个连接都会有自己的内存数据库。诀窍是使用具有URI格式的内存命名数据库,如下所示

import random
import string
import sqlite3

# creating a random name for the temporary memory DB
sqlite_shared_name = "test_db_{}".format(
            random.sample(string.ascii_letters, k=4)
        )

create_engine(
   "sqlite:///file:{}?mode=memory&cache=shared&uri=true".format(
        sqlite_shared_name))
Run Code Online (Sandbox Code Playgroud)
  1. 格式是查询字符串参数指定的 URI uri=true(请参阅 SQLAlchemy 文档)
  2. 它是一个内存数据库mode=memory
  3. 它可以在各种连接之间共享cache=shared

如果您有另一个连接,那么您可以使用或多或少相同的连接字符串。例如,要使用 python 模块获取与内存中同一数据库的连接,您可以从查询字符串(和方言部分)中sqlite删除并将其作为参数传递:uri=truesqlite:///

dest = sqlite3.connect(
            "file:{}?mode=memory&cache=shared".format(sqlite_shared_name), 
            uri=True)
Run Code Online (Sandbox Code Playgroud)