Search code examples
pythonsqlalchemysqlacodegen

How to run sqlacodegen?


I'm trying to run sqlacodegen to create a SQLAlchemy model from an existing PostgreSQL database.

It won't run. When I type sqlacodegen --help I get:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: bad operand type for unary -: '_Helper'

Basic instructions are here.

How do you get sqlacodegen to run?


Solution

  • It is because you did this in Python shell:

    >>> import sqlacodegen
    >>> sqlacodegen --help
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: bad operand type for unary -: '_Helper'
    

    You should have executed sqlacodegen --help in your Unix command shell / Windows command prompt:

    % sqlacodegen --help
    usage: sqlacodegen [-h] [--version] [--schema SCHEMA] [--tables TABLES]
                       [--noviews] [--noindexes] [--noconstraints] [--nojoined]
                       [--noinflect] [--outfile OUTFILE]
                       [url]
    
    Generates SQLAlchemy model code from an existing database.
    
    positional arguments:
      url                SQLAlchemy url to the database
    
    optional arguments:
      -h, --help         show this help message and exit
      --version          print the version number and exit
      --schema SCHEMA    load tables from an alternate schema
      --tables TABLES    tables to process (comma-separated, default: all)
      --noviews          ignore views
      --noindexes        ignore indexes
      --noconstraints    ignore constraints
      --nojoined         don't autodetect joined table inheritance
      --noinflect        don't try to convert tables names to singular form
      --outfile OUTFILE  file to write output to (default: stdout)
    

    An example of the actual command would then be:

    % sqlacodegen --outfile models.py \
    postgresql://gollyjer:swordfish@localhost:5432/mydatabase
    

    Where gollyjer:swordfish are your credentials in the format user:password.