SQLAlchemy AttributeError: объект 'str' не имеет атрибута 'connect'Python

Программы на Python
Ответить
Anonymous
 SQLAlchemy AttributeError: объект 'str' не имеет атрибута 'connect'

Сообщение Anonymous »

Я пытаюсь заполнить базу данных с помощью Python и SQLAlchemy, используя тот же синтаксис, который я использовал в предыдущих проектах, но теперь получаю следующую ошибку:

Код: Выделить всё

Traceback (most recent call last):
File "/home/vacosti/scraper_v2/populate_db.py", line 16, in 
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 "", 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 "", 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 "", 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 "", 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 "", 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'
Мое определение таблицы следующее:

Код: Выделить всё

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)

Мой код для заполнения базы данных следующий:

Код: Выделить всё

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)
Что касается синтаксиса с Session(...) как сеансом, session.begin():, в документации сказано, что я могу это сделать.
В чем может быть проблема в данном случае?

Подробнее здесь: https://stackoverflow.com/questions/792 ... te-connect
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»