21

After installing apache-superset using pip in virtual environment, I run:

superset upgrade db   

I run into the following error:

ImportError: cannot import name '_ColumnEntity' from 'sqlalchemy.orm.query' (/Users/ahmedawny/supersetenv/lib/python3.7/site-packages/sqlalchemy/orm/query.py)

Any advice would be appreciated.

3awny
  • 319
  • 1
  • 2
  • 10

5 Answers5

44

The core reason for this is that sqlalchemy 1.4 shipped, so it is now the default that pip installs. There were many interface changes and a new query interface added.

So upgrading to 1.4 breaks stuff that depends on the sqlalchemy 1.3 API internals. In your requirements.txt file-- pin the project version to the 1.3.x series until the rest of your stuff catches up. For example, as of this date sqlalchemy-utils is still dependent on sqlalchemy 1.3x.

requirements.txt:

sqlalchemy < 1.4.0

Then use:

pip -r requirements.txt

to "downgrade" to the pinned version.

5

If you don't want to modify the requirements file, as recommended in @InsertSpywareTrackingHere's answer, you can manually pip install an older version instead:

pip install sqlalchemy==1.3.24
joanis
  • 10,635
  • 14
  • 30
  • 40
Eugene
  • 71
  • 1
  • 1
  • Isn't this just a less flexible version of the top-voted answer? Please read [answer]. – ChrisGPT was on strike Dec 01 '21 at 01:43
  • This does not provide an answer to the question. Once you have sufficient [reputation](https://stackoverflow.com/help/whats-reputation) you will be able to [comment on any post](https://stackoverflow.com/help/privileges/comment); instead, [provide answers that don't require clarification from the asker](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can-i-do-instead). - [From Review](/review/late-answers/30474688) – Sonia Samipillai Dec 01 '21 at 07:12
  • While this is equivalent to the top-voted answer, once you know what you're doing, I think this answer has value for the beginner, and I would encourage reviewers not to delete it. – joanis Dec 01 '21 at 15:11
2

Go to sqlalchemy_utils.functions file and change :

  • from sqlalchemy.orm.query import _ColumnEntity (comment this one, or delete it)
  • from sqlalchemy.orm.context import _ColumnEntity (include)

in consequence of this, i belive it should change some stuff along the code...

2

you can temporarily fix this by changing the imports in sqlalchemy_utils\functions\orm.py:

from sqlalchemy.orm.query import _ColumnEntity

to

from sqlalchemy.orm.context import _ColumnEntity
Firdous bhat
  • 105
  • 7
0

@InsertSpywareTrackingHere answer is correct, Just want to add that a new release for Flask-AppBuilder was made that pins SQLAlchemy bellow 1.4.0. So installing apache-superset using pip install apache-superset should work now.

dpgaspar
  • 1,193
  • 8
  • 10
  • 2
    I just pip installed apache-superset fresh. it complained with "flask-appbuilder 3.2.2 requires SQLAlchemy<1.4.0, but you'll have sqlalchemy 1.4.7 which is incompatible." but finished. I still needed to manually pip install sqlalchemy==1.3.24 after. perhaps the dependency ordering in the setup.py is not right? I am not an expert. – t1m0 Apr 12 '21 at 21:45