Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQL炼金术表不存在_Python_Pandas_Sqlalchemy_Plotly Dash - Fatal编程技术网

Python SQL炼金术表不存在

Python SQL炼金术表不存在,python,pandas,sqlalchemy,plotly-dash,Python,Pandas,Sqlalchemy,Plotly Dash,我在Dash应用程序上写东西,并使用SQL alchemy对数据库进行处理。我想使数据库的创建自动化,因此如果数据库不存在,我有几行代码来创建数据库 from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, Float from sqlalchemy_utils import create_database, database_exists engine = create_engine(SQL

我在Dash应用程序上写东西,并使用SQL alchemy对数据库进行处理。我想使数据库的创建自动化,因此如果数据库不存在,我有几行代码来创建数据库

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, Float
from sqlalchemy_utils import create_database, database_exists

engine = create_engine(SQLALCHEMY_DATABASE_URI, echo = True)

create_database(SQLALCHEMY_DATABASE_URI)
meta = MetaData()

flagged_vendors_table = Table(
    'flagged_vendors', meta,
    Column(vendor_col, String, primary_key = True),
    Column(flag_col, Integer)
)

meta.create_all(engine)
根据echo,这似乎工作得很好:

2020-01-21 09:28:30,604 INFO sqlalchemy.engine.base.Engine
CREATE TABLE flagged_vendors (
        "Vendor PRS_description" VARCHAR NOT NULL,
        "Flag" INTEGER,
        PRIMARY KEY ("Vendor PRS_description")
)


2020-01-21 09:28:30,608 INFO sqlalchemy.engine.base.Engine ()
2020-01-21 09:28:30,639 INFO sqlalchemy.engine.base.Engine COMMIT
但是,当我执行该应用程序时,会出现以下错误:

Traceback (most recent call last):
  File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1246, in _execute_context
    cursor, statement, parameters, context
  File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\sqlalchemy\engine\default.py", line 581, in do_execute
    cursor.execute(statement, parameters)
sqlite3.OperationalError: no such table: flagged_vendors

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

Traceback (most recent call last):
  File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\pandas\io\sql.py", line 518, in to_sql
    method=method,
  File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\pandas\io\sql.py", line 1319, in to_sql
    table.create()
  File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\pandas\io\sql.py", line 647, in create
    self.pd_sql.drop_table(self.name, self.schema)
  File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\pandas\io\sql.py", line 1367, in drop_table
    self.get_table(table_name, schema).drop()
  File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\sqlalchemy\sql\schema.py", line 884, in drop
    bind._run_visitor(ddl.SchemaDropper, self, checkfirst=checkfirst)
  File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\sqlalchemy\engine\base.py", line 2049, in _run_visitor
    conn._run_visitor(visitorcallable, element, **kwargs)
  File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1618, in _run_visitor
    visitorcallable(self.dialect, self, **kwargs).traverse_single(element)
  File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\sqlalchemy\sql\visitors.py", line 138, in traverse_single
    return meth(obj, **kw)
  File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\sqlalchemy\sql\ddl.py", line 1002, in visit_table
    self.connection.execute(DropTable(table))
  File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\sqlalchemy\engine\base.py", line 982, in execute
    return meth(self, multiparams, params)
  File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\sqlalchemy\sql\ddl.py", line 72, in _execute_on_connection
    return connection._execute_ddl(self, multiparams, params)
  File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1044, in _execute_ddl
    compiled,
  File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1250, in _execute_context
    e, statement, parameters, cursor, context
  File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1476, in _handle_dbapi_exception
    util.raise_from_cause(sqlalchemy_exception, exc_info)
  File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\sqlalchemy\util\compat.py", line 398, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\sqlalchemy\util\compat.py", line 152, in reraise
    raise value.with_traceback(tb)
  File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1246, in _execute_context
    cursor, statement, parameters, context
  File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\sqlalchemy\engine\default.py", line 581, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: flagged_vendors
[SQL: 
DROP TABLE flagged_vendors]
(Background on this error at: http://sqlalche.me/e/e3q8)
回溯不会导致代码中出现任何行,这是我试图调查的问题,但我相信代码中只有一部分可能导致错误:

def to_storage(df, storage_info):
    storage_type = storage_info["storage_type"]
    if storage_type == "sql":
        db_uri = storage_info["db_uri"]
        engine = create_engine(db_uri, echo = False, pool_pre_ping=True)
        table_name = storage_info["table_name"]
        df.to_sql(table_name, engine, if_exists = "replace")

这很奇怪,因为代码应该只在表存在时才删除它。最后一个元素:只有在我启动应用程序时指定的URI中没有现有数据库时,才会出现此问题。

@IljaEverilä它们是相同的,并且包含一个相对值path@IljaEverilä它们是相同的,并且包含一个相对路径