ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python, sqlalchemy] VARCHAR requires a length on dialect mysql 오류
    Python 2024. 6. 17. 12:27
    728x90

    안녕하세요.

    또 오랜만에 글 남겨드립니다.

     

    이제 회사를 옮기고 나니 하루하루가 미래를 알 수 없어 주기적인 글 작성이 쉽지 않습니다.

     

    또 C#이 아닌 요즘은 Docker와 Python을 주로 하게되네요.

    알쏭달쏭합니다.

     

    도커가 특히 너무 어렵지만 그럼에도 하나씩 알아가는 재미가 있습니다.

     

    요즘은 FastAPI를 하고있습니다.

    그리고 sqlalchemy orm을 통해서 간단한 테스트중에 발생한 에러를 수정한 내용을 기록해보고자 합니다.

     

    에러 상황

    에러상황은 사실 너무나도 심플합니다. 모델을 정의하고 alembic init migrations를 이용해 자동으로 테이블을 만들고자 했습니다.(현재는 제가 이미 작업을 해놓은게 있다보니 오류 이미지가 보이지가 않네요 ㅠㅠ)

     

    에러 내용

    InvalidRequestError: VARCHAR requires a length on dialect mysql...

    이런 에러가 발생하며 계속 안됐습니다. 자세히는 기재하지 못했지만 제가 만든 컬럼 중 하나인 subject가 문제라는걸

    알아 수정해보고자 서칭을 시작했습니다.

     

    1차 해결 시도

    해결방법은 의외로 간단했습니다.

        id=Column(Integer, primary_key=True)
        subject=Column(String, nullable=False)
        content=Column(Text, nullable=False)
        create_date=Column(DateTime, nullable=False)

    제가 기존에 생성한 모델에서 subject column에 length 즉 길이를 지정해줘야 한다는 내용이었죠.

    좋습니다. 그렇기에 저 역시 내용을 지정했습니다.

        id=Column(Integer, primary_key=True)
        subject=Column(String(500), nullable=False)
        content=Column(Text, nullable=False)
        create_date=Column(DateTime, nullable=False)

    이렇게 말이죠~ 하지만 아쉽게도 해당 오류는 계속 발생해 저를 잔뜩 화나게 했습니다.

    뭐가 문제일까요? 할 것도 많은데... 후~

     

    2차 해결 시도

    그러다가 여기에만 subject가 있나? 라는 생각에 프로젝트내 vscode 검색기능을 통해 subject라는 단어를 전책 검색했습니다. 그러다가 migrations/versions/{{알수 없는 값}.py/upgrade라는 파일에 subject가 하나더 보이는걸 발견했습니다.

    아니나 다를까 여기에 subject의 length값이 비어있었습니다.

    def upgrade() -> None:
        # ### commands auto generated by Alembic - please adjust! ###
        op.create_table('question',
        sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('subject()', sa.String, nullable=False),
        sa.Column('content', sa.Text(), nullable=False),
        sa.Column('create_date', sa.DateTime(), nullable=False),
        sa.PrimaryKeyConstraint('id')
        )

    이렇게 말이죠~

    그래서 저는 이 값을 채워줬습니다.

    def upgrade() -> None:
        # ### commands auto generated by Alembic - please adjust! ###
        op.create_table('question',
        sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('subject(100)', sa.String, nullable=False),
        sa.Column('content', sa.Text(), nullable=False),
        sa.Column('create_date', sa.DateTime(), nullable=False),
        sa.PrimaryKeyConstraint('id')
        )

    이렇게 말이죠~

     

    그랬더니 아주 간단하게 해결이 됐습니다.

    꽤 지난 내용을 계속 묵혀두다 기재했더니 부실합니다.

    그러나 해결을 위한 기록으로는 괜찮지 싶어 이렇게 남겨놓습니다.

     

    요즘 날씨가 너무 무덥습니다. 아직 제대로된 여름이 오기도 전인데 무섭네요.

    모두 건강관리 잘하시고 항상 행복한 하루가 되시길 바랍니다.

     

    조만간 또 다시 와서 글을 남겨보겠습니다. :D

     

    감사합니다.😀😀😀

    댓글

Designed by Tistory.