Seems there’s a problem with my sql alchemy connection, don’t get why? it works sometimes and then doesn’t the next. Also vs code isn’t auto recommending sql alchemy methods, maybe I’ve set it up wrong?
–database.py file
from sqlalchemy import create_engine, engine_from_config from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker sqlalchemy_conn= 'postgresql://postgres:naija4life@localhost/fastapi database' ormengine= create_engine(sqlalchemy_conn) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind= ormengine ) Base = declarative_base() # Dependency def get_db(): db = SessionLocal() try: yield db finally: db.close()
main file
from logging import exception from random import randrange from tkinter.tix import STATUS from typing import Optional from urllib import response from fastapi import Body, FastAPI, Query, Response ,status, HTTPException , Depends from pydantic import BaseModel import psycopg2 from psycopg2.extras import RealDictCursor import time import sqlalchemy from sqlalchemy import create_engine, engine_from_config from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker,session , query import models from database import ormengine , SessionLocal , get_db app= FastAPI() models.Base.metadata.create_all(bind=ormengine) while True: try: conn = psycopg2.connect(dbname= 'fastapi database', host= 'localhost' , port= 5432 , user = 'postgres', password= 'naija4life' ) cur = conn.cursor() print('database connection succesful') break except Exception as error : print("connection failed") print("error explanation:", error) time.sleep(2) class Post(BaseModel): title: str content: str Published: bool = True rating: Optional[int] = None @app.get("/sqlalchemy") def test_post(db: session= Depends(get_db)): post= db.query(models.Post).all() return {"data":post}
ERROR I GET:
return await future File "C:UsersaobinOneDriveDocumentsAPI projfastlibsite-packagesanyio_backends_asyncio.py", line 754, in run result = context.run(func, *args) File "C:UsersaobinOneDriveDocumentsAPI projapp.main.py", line 78, in test_post post= db.query(models.Post).all() File "C:UsersaobinOneDriveDocumentsAPI projfastlibsite-packagessqlalchemyormquery.py", line 2759, in all return self._iter().all() File "C:UsersaobinOneDriveDocumentsAPI projfastlibsite-packagessqlalchemyormquery.py", line 2894, in _iter result = self.session.execute( File "C:UsersaobinOneDriveDocumentsAPI projfastlibsite-packagessqlalchemyormsession.py", line 1691, in execute conn = self._connection_for_bind(bind) File "C:UsersaobinOneDriveDocumentsAPI projfastlibsite-packagessqlalchemyormsession.py", line 1532, in _connection_for_bind return self._transaction._connection_for_bind( File "C:UsersaobinOneDriveDocumentsAPI projfastlibsite-packagessqlalchemyormsession.py", line 747, in _connection_for_bind conn = bind.connect() AttributeError: 'function' object has no attribute 'connect'
It seems to me that the query method from sql alchemy isnt working for some reason. It doesn’t autocomplete on vs code either.I’ve tried the other variants: sql_expresson ,
Advertisement
Answer
I was looking through the SQL alchemy documentation. The engine connection url was in double-quotes there….so I changed that in my document…..it worked.
sqlalchemy_conn= 'postgresql://postgres:naija4life@localhost/fastapi database'
became
sqlalchemy_conn= "postgresql://postgres:naija4life@localhost/fastapi database"