简体   繁体   中英

How to read and insert data to postgres with sqlalchemy

I have the following sql alchemy models. I want to insert data into user tables but failed. I use postgres with sqlalchemy and fastapi

class Group(Base):
    __tablename__ = "groups"

    id = Column(
        Integer,
        primary_key=True,
        server_default=text("nextval('parties_id_seq'::regclass)"),
    )
    group_type = Column(
        Enum(
            "user",,
            "partner",,
            name="group_type",
        ),
        index=True,
    )

class User(Group):
    __tablename__ = "users"


    id = Column(ForeignKey("groups.id"), primary_key=True)
    username = Column(String(100), nullable=False, unique=True)
    email = Column(String(150), nullable=False, unique=True)
    referral_id = Column(ForeignKey("users.id"))

    referral = relationship("User", remote_side=[id])

I want to query data based on email and then insert the data into users table but got the following errors:

sqlalchemy.exc.InvalidRequestError: Query contains no columns with which to SELECT from.

Here is what i have tried so far:

def get_user_by_email(db: Session, email: str):
    return db.query().filter(user_model.User.email == email).first()

def create_user(db: Session, user: user_pydantic.UserCreate):
    db_user = user_model.User(
        username=user.username,
        email=user.email,
    )
    db.add(db_user)
    db.commit()
    db.refresh(db_user)

    return db_user

def create_user(user: UserCreate, db: Session = Depends(get_db)):
    db_user = user_service.get_user_by_email(db, email=user.email)
    if db_user:
        return db_user
    if db_user:
        raise HTTPException(status_code=400, detail="Username already registered")
    return user_service.create_user(db=db, user=user)

You need to define the column in your query:

def get_user_by_email(db: Session, email: str):
    return db.query(user_model.User).filter(user_model.User.email == email).first()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM