pandas to_ sql не может заменить таблицу, если домен содержит скобки [] - PullRequest
0 голосов
/ 10 января 2020

Я сохраняю таблицу на SQL сервере и мне нужно заменить существующую таблицу с тем же именем.

df1.to_sql('customer', schema = r'Marketing\xyz', con = engine, index = False, if_exists = 'replace')

сработало, но добавление скобок в схему сломает ее:

df1.to_sql('customer', schema = r'[Marketing\xyz]', con = engine, index = False, if_exists = 'replace')

с этой ошибкой:

Traceback (most recent call last):

  File "<ipython-input-11-69ec99f37fd6>", line 1, in <module>
    df1.to_sql('customer', schema = r'[abc\xyz]', con = engine, index = False, if_exists = 'replace')

  File "C:\Users\xyz\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\generic.py", line 2712, in to_sql
    method=method,

  File "C:\Users\xyz\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\sql.py", line 518, in to_sql
    method=method,

  File "C:\Users\xyz\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\sql.py", line 1319, in to_sql
    table.create()

  File "C:\Users\xyz\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\sql.py", line 656, in create
    self._execute_create()

  File "C:\Users\xyz\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\sql.py", line 638, in _execute_create
    self.table.create()

  File "C:\Users\xyz\AppData\Local\Continuum\anaconda3\lib\site-packages\sqlalchemy\sql\schema.py", line 860, in create
    bind._run_visitor(ddl.SchemaGenerator, self, checkfirst=checkfirst)

  File "C:\Users\xyz\AppData\Local\Continuum\anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 2036, in _run_visitor
    conn._run_visitor(visitorcallable, element, **kwargs)

  File "C:\Users\xyz\AppData\Local\Continuum\anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 1607, in _run_visitor
    visitorcallable(self.dialect, self, **kwargs).traverse_single(element)

  File "C:\Users\xyz\AppData\Local\Continuum\anaconda3\lib\site-packages\sqlalchemy\sql\visitors.py", line 132, in traverse_single
    return meth(obj, **kw)

  File "C:\Users\xyz\AppData\Local\Continuum\anaconda3\lib\site-packages\sqlalchemy\sql\ddl.py", line 826, in visit_table
    include_foreign_key_constraints,

  File "C:\Users\xyz\AppData\Local\Continuum\anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 988, in execute
    return meth(self, multiparams, params)

  File "C:\Users\xyz\AppData\Local\Continuum\anaconda3\lib\site-packages\sqlalchemy\sql\ddl.py", line 72, in _execute_on_connection
    return connection._execute_ddl(self, multiparams, params)

  File "C:\Users\xyz\AppData\Local\Continuum\anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 1050, in _execute_ddl
    compiled,

  File "C:\Users\xyz\AppData\Local\Continuum\anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 1248, in _execute_context
    e, statement, parameters, cursor, context

  File "C:\Users\xyz\AppData\Local\Continuum\anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 1466, in _handle_dbapi_exception
    util.raise_from_cause(sqlalchemy_exception, exc_info)

  File "C:\Users\xyz\AppData\Local\Continuum\anaconda3\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\xyz\AppData\Local\Continuum\anaconda3\lib\site-packages\sqlalchemy\util\compat.py", line 152, in reraise
    raise value.with_traceback(tb)

  File "C:\Users\xyz\AppData\Local\Continuum\anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 1244, in _execute_context
    cursor, statement, parameters, context

  File "C:\Users\xyz\AppData\Local\Continuum\anaconda3\lib\site-packages\sqlalchemy\engine\default.py", line 552, in do_execute
    cursor.execute(statement, parameters)

ProgrammingError: (pyodbc.ProgrammingError) ('42S01', "[42S01] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]There is already an object named 'customer' in the database. (2714) (SQLExecDirectW)")
[SQL: 
CREATE TABLE [Marketing\xyz].customer (
    [Customer] not NULL
)

]
(Background on this error at: http://sqlalche.me/e/f405)

Кто-нибудь знает, почему при добавлении скобок в схему pandas не удастся автоматически удалить таблицу для меня? Спасибо -

Я использую

sys.version
Out[19]: '3.7.4 (default, Aug  9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)]'

pd.__version__
Out[16]: '0.25.3'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...