I'm trying to populate a database with Python and SQLAlchemy using the same syntax as I've used in previous projects, but now I'm getting this error: Traceback (most recent call last): File "/home/vacosti/scraper_v2/populate_db.py", line 16, in <module> with Session(os.environ.get('DATABASE_URI'), future=True) as session, session.begin(): File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/engine/util.py", line 147, in __exit__ with util.safe_reraise(): File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 146, in __exit__ raise exc_value.with_traceback(exc_tb) File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/engine/util.py", line 145, in __exit__ self.commit() File "<string>", line 2, in commit File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/orm/state_changes.py", line 139, in _go ret_value = fn(self, *arg, **kw) File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1313, in commit self._prepare_impl() File "<string>", line 2, in _prepare_impl File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/orm/state_changes.py", line 139, in _go ret_value = fn(self, *arg, **kw) File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1288, in _prepare_impl self.session.flush() File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 4352, in flush self._flush(objects) File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 4487, in _flush with util.safe_reraise(): File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 146, in __exit__ raise exc_value.with_traceback(exc_tb) File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 4448, in _flush flush_context.execute() File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute rec.execute(self) File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute util.preloaded.orm_persistence.save_obj( File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/orm/persistence.py", line 60, in save_obj for ( File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/orm/persistence.py", line 223, in _organize_states_for_save for state, dict_, mapper, connection in _connections_for_states( File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/orm/persistence.py", line 1753, in _connections_for_states connection = uowtransaction.transaction.connection(base_mapper) File "<string>", line 2, in connection File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/orm/state_changes.py", line 139, in _go ret_value = fn(self, *arg, **kw) File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1039, in connection return self._connection_for_bind(bind, execution_options) File "<string>", line 2, in _connection_for_bind File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/orm/state_changes.py", line 139, in _go ret_value = fn(self, *arg, **kw) File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1175, in _connection_for_bind conn = self._parent._connection_for_bind( File "<string>", line 2, in _connection_for_bind File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/orm/state_changes.py", line 139, in _go ret_value = fn(self, *arg, **kw) File "/home/vacosti/scraper_v2/svenv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1189, in _connection_for_bind conn = bind.connect() AttributeError: 'str' object has no attribute 'connect' My table definition is the following: from sqlalchemy import Column, Integer, String, Float, LargeBinary from sqlalchemy.orm import declarative_base Base = declarative_base() class Product(Base): # type: ignore __tablename__ = 'products' id = Column(Integer, primary_key=True) #as per the docs The default value is the string "auto", which indicates that a single-column (i.e. non-composite) primary key that is of an INTEGER type with no other client-side or server-side default constructs indicated should receive auto increment semantics automatically. external_id = Column(String, nullable=False, unique=True, index=True) description = Column(String, nullable=False, index=True) udescription = Column(String, nullable=False, index=True) price = Column(Float, nullable=False) image = Column(LargeBinary) My code to populate the database is the following: import os import json import codecs from sqlalchemy.orm import Session from database.tables import Product from pathlib import Path CURRENT_DIR = Path(__file__).parent products = json.loads(codecs.open(os.path.join(CURRENT_DIR,'data/products.json')).read()) for product in products: with Session(os.environ.get('DATABASE_URI'), future=True) as session, session.begin(): productORM = Product(external_id=product['product_id'], description=product['description'], udescription=product['udescription'], price=product['price']) session.add(productORM) About the syntax with Session(...) as session, session.begin():, the docs says I can do so. What could be the problem in this case? Continue reading...