Skip to content

Schema naming starting with numeric is not supported #381

@Akhilj786

Description

@Akhilj786

I am aware vertica does not encourges us to use schema names starting with number. But our usecase needed to follow numeric standard in order to support our analytics and machine learning pipeline.

e.g If we have two schema lets say abcd_dm and 0223_dm, abcd_dm all insert just work fine, but for 0223_dm insert throw following issue:

File "/opt/anaconda3/envs/py27/lib/python2.7/site-packages/pandas/core/generic.py", line 1201, in to_sql
    chunksize=chunksize, dtype=dtype)
  File "/opt/anaconda3/envs/py27/lib/python2.7/site-packages/pandas/io/sql.py", line 470, in to_sql
    chunksize=chunksize, dtype=dtype)
  File "/opt/anaconda3/envs/py27/lib/python2.7/site-packages/pandas/io/sql.py", line 1148, in to_sql
    table.insert(chunksize)
  File "/opt/anaconda3/envs/py27/lib/python2.7/site-packages/pandas/io/sql.py", line 664, in insert
    self._execute_insert(conn, keys, chunk_iter)
  File "/opt/anaconda3/envs/py27/lib/python2.7/site-packages/pandas/io/sql.py", line 639, in _execute_insert
    conn.execute(self.insert_statement(), data)
  File "/opt/anaconda3/envs/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 982, in execute
    return meth(self, multiparams, params)
  File "/opt/anaconda3/envs/py27/lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 293, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/opt/anaconda3/envs/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1101, in _execute_clauseelement
    distilled_params,
  File "/opt/anaconda3/envs/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1250, in _execute_context
    e, statement, parameters, cursor, context
  File "/opt/anaconda3/envs/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1478, in _handle_dbapi_exception
    util.reraise(*exc_info)
  File "/opt/anaconda3/envs/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1226, in _execute_context
    cursor, statement, parameters, context
  File "/opt/anaconda3/envs/py27/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 585, in do_executemany
    cursor.executemany(statement, parameters)
  File "/opt/anaconda3/envs/py27/lib/python2.7/site-packages/vertica_python/vertica/cursor.py", line 257, in executemany
    "executemany is implemented for simple INSERT statements only")
NotImplementedError: executemany is implemented for simple INSERT statements only

Version Info:
Vertica : Vertica Analytic Database v8.0.0-1
Python Version: 2.7
vertica-python: 0.10.4
sqlalchemy-vertica==0.0.4
pandas==0.23.4
SQLAlchemy==1.3.13

The way we circumvent this issue was change the regex of this file
https://github.com/vertica/vertica-python/blob/master/vertica_python/vertica/cursor.py#L120
to be RE_NAME_BASE = u"[0-9_a-zA-Z_][\\w\\d\\$_]*" this did fix the issue.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions