Uploaded image for project: 'MariaDB Connector/Python'
  1. MariaDB Connector/Python
  2. CONPY-385

named_tuple implementation raises exception if column name is a keyword

    XMLWordPrintable

Details

    • Bug
    • Status: Closed (View Workflow)
    • Major
    • Resolution: Fixed
    • 2.0.0-rc
    • 2.0.0-rc3
    • Generic
    • None

    Description

      While the named tuple implementation checks name.isidentifier it doesn't check if name is a keyword:

      >>> cursor=conn.cursor(named_tuple=True)
      >>> cursor.execute("select 1 as def")
      >>> cursor.fetchone()
      Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/home/georg/work/venv/lib/python3.12/site-packages/mariadb/sync_cursor.py", line 325, in fetchone
      return self._apply_row_formatting([row])[0]
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/georg/work/venv/lib/python3.12/site-packages/mariadb/base_cursor.py", line 669, in _apply_row_formatting
      return self._convert_rows_to_named_tuples(rows, columns)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/georg/work/venv/lib/python3.12/site-packages/mariadb/base_cursor.py", line 645, in _convert_rows_to_named_tuples
      RowClass = self._create_named_tuple_class(columns)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/georg/work/venv/lib/python3.12/site-packages/mariadb/base_cursor.py", line 641, in _create_named_tuple_class
      return namedtuple('Row', field_names) # pyright: ignore[reportUntypedNamedTuple]
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/lib/python3.12/collections/_init_.py", line 403, in namedtuple
      raise ValueError('Type names and field names cannot be a '
      ValueError: Type names and field names cannot be a keyword: 'def'

      Proposed solution:

      import keyword
       
      ...
      if not name or not name.isidentifier() or keyword.iskeyword(name):
                      name = f'column_{len(field_names)}'
      

      Attachments

        Activity

          People

            diego dupin Diego Dupin
            georg Georg Richter
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Git Integration

                Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.