数据库路径作为sqlalchemy的变量的引擎

发布于 2025-02-08 13:02:48 字数 6911 浏览 0 评论 0原文

我尝试通过使用和给出变量的路径来创建数据库。通过某些回旋,代码不起作用。当我使用字符串时,它有效。是否可以将变量传递到发动机功能中?

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Date, ForeignKey

file_settings = open('html\\settings.ini', 'r')
lines = file_settings.readlines()
url = lines[0]

engine  = create_engine(url, echo=False)
Session = sessionmaker(bind=engine)
session = Session()
Base    = declarative_base()

这是我收到的错误消息,当我尝试使用变量而不是用于数据库URL的简单字符串:

Traceback (most recent call last):   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 3250, in _wrap_pool_connect
    return fn()   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 310, in connect
    return _ConnectionFairy._checkout(self)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 868, in _checkout
    fairy = _ConnectionRecord.checkout(pool)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 476, in checkout
    rec = pool._do_get()   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\impl.py", line 256, in _do_get
    return self._create_connection()   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 256, in _create_connection
    return _ConnectionRecord(self)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 371, in __init__
    self.__connect()   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 665, in __connect
    with util.safe_reraise():   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\util\langhelpers.py", line 70, in __exit__
    compat.raise_(   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\util\compat.py", line 207, in raise_
    raise exception   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 661, in __connect
    self.dbapi_connection = connection = pool._invoke_creator(self)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\create.py", line 590, in connect
    return dialect.connect(*cargs, **cparams)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\default.py", line 597, in connect
    return self.dbapi.connect(*cargs, **cparams) sqlite3.OperationalError: unable to open database file

The above exception was the direct cause of the following exception:

Traceback (most recent call last):   File "C:\prog\Python\Eel\Eel Tasks\app.py", line 275, in <module>
    Base.metadata.create_all(engine)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\sql\schema.py", line 4785, in create_all
    bind._run_ddl_visitor(   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 3116, in _run_ddl_visitor
    with self.begin() as conn:   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 3032, in begin
    conn = self.connect(close_with_result=close_with_result)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 3204, in connect
    return self._connection_cls(self, close_with_result=close_with_result)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 96, in __init__
    else engine.raw_connection()   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 3283, in raw_connection
    return self._wrap_pool_connect(self.pool.connect, _connection)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 3253, in _wrap_pool_connect
    Connection._handle_dbapi_exception_noconnection(   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 2100, in _handle_dbapi_exception_noconnection
    util.raise_(   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\util\compat.py", line 207, in raise_
    raise exception   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 3250, in _wrap_pool_connect
    return fn()   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 310, in connect
    return _ConnectionFairy._checkout(self)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 868, in _checkout
    fairy = _ConnectionRecord.checkout(pool)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 476, in checkout
    rec = pool._do_get()   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\impl.py", line 256, in _do_get
    return self._create_connection()   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 256, in _create_connection
    return _ConnectionRecord(self)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 371, in __init__
    self.__connect()   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 665, in __connect
    with util.safe_reraise():   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\util\langhelpers.py", line 70, in __exit__
    compat.raise_(   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\util\compat.py", line 207, in raise_
    raise exception   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 661, in __connect
    self.dbapi_connection = connection = pool._invoke_creator(self)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\create.py", line 590, in connect
    return dialect.connect(*cargs, **cparams)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\default.py", line 597, in connect
    return self.dbapi.connect(*cargs, **cparams) sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file (Background on this error at: https://sqlalche.me/e/14/e3q8)

I try to create my database by using and giving the path with a variable. By some reson the code does not work. It works, when I use string. Is it possible to pass variable into the engine function?

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Date, ForeignKey

file_settings = open('html\\settings.ini', 'r')
lines = file_settings.readlines()
url = lines[0]

engine  = create_engine(url, echo=False)
Session = sessionmaker(bind=engine)
session = Session()
Base    = declarative_base()

This is the Error message that I got, when I try to use variable instead of simple string for the database URL:

Traceback (most recent call last):   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 3250, in _wrap_pool_connect
    return fn()   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 310, in connect
    return _ConnectionFairy._checkout(self)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 868, in _checkout
    fairy = _ConnectionRecord.checkout(pool)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 476, in checkout
    rec = pool._do_get()   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\impl.py", line 256, in _do_get
    return self._create_connection()   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 256, in _create_connection
    return _ConnectionRecord(self)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 371, in __init__
    self.__connect()   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 665, in __connect
    with util.safe_reraise():   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\util\langhelpers.py", line 70, in __exit__
    compat.raise_(   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\util\compat.py", line 207, in raise_
    raise exception   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 661, in __connect
    self.dbapi_connection = connection = pool._invoke_creator(self)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\create.py", line 590, in connect
    return dialect.connect(*cargs, **cparams)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\default.py", line 597, in connect
    return self.dbapi.connect(*cargs, **cparams) sqlite3.OperationalError: unable to open database file

The above exception was the direct cause of the following exception:

Traceback (most recent call last):   File "C:\prog\Python\Eel\Eel Tasks\app.py", line 275, in <module>
    Base.metadata.create_all(engine)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\sql\schema.py", line 4785, in create_all
    bind._run_ddl_visitor(   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 3116, in _run_ddl_visitor
    with self.begin() as conn:   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 3032, in begin
    conn = self.connect(close_with_result=close_with_result)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 3204, in connect
    return self._connection_cls(self, close_with_result=close_with_result)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 96, in __init__
    else engine.raw_connection()   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 3283, in raw_connection
    return self._wrap_pool_connect(self.pool.connect, _connection)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 3253, in _wrap_pool_connect
    Connection._handle_dbapi_exception_noconnection(   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 2100, in _handle_dbapi_exception_noconnection
    util.raise_(   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\util\compat.py", line 207, in raise_
    raise exception   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 3250, in _wrap_pool_connect
    return fn()   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 310, in connect
    return _ConnectionFairy._checkout(self)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 868, in _checkout
    fairy = _ConnectionRecord.checkout(pool)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 476, in checkout
    rec = pool._do_get()   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\impl.py", line 256, in _do_get
    return self._create_connection()   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 256, in _create_connection
    return _ConnectionRecord(self)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 371, in __init__
    self.__connect()   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 665, in __connect
    with util.safe_reraise():   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\util\langhelpers.py", line 70, in __exit__
    compat.raise_(   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\util\compat.py", line 207, in raise_
    raise exception   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 661, in __connect
    self.dbapi_connection = connection = pool._invoke_creator(self)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\create.py", line 590, in connect
    return dialect.connect(*cargs, **cparams)   File "C:\Users\An\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\default.py", line 597, in connect
    return self.dbapi.connect(*cargs, **cparams) sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file (Background on this error at: https://sqlalche.me/e/14/e3q8)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文