alembic revision - -autogenerate, alembic current 명령을 입력하면 무조건 이렇게 뜸
INFO [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
ERROR [alembic.util.messaging] Can't locate revision identified by '30e4c2d93125 '
FAILED: Can't locate revision identified by '30e4c2d93125 '
근데 30e4c2d93125은 잘 존재하는 파일인데….
하루종일 이거저거 만지다가 스택오버플로우랑 이런 저런 곳에 올라온 해결법들이 다~ 안 되길래
→ 파이참에 local history → show history를 해서 어제 커밋했던 부분으로 되돌아 온 다음 다시 alembic revision —autogenerate를 했다.
(myapi) C:\project\myapi>alembic revision --autogenerate
INFO [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.autogenerate.compare] Detected added unique constraint 'uq_user_email' on '('email',)'
INFO [alembic.autogenerate.compare] Detected added unique constraint 'uq_user_username' on '('username',)'
Generating C:\project\myapi\migrations\versions\65f5e85faf86_.py ... done
(myapi) C:\project\myapi>alembic upgrade head
INFO [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.runtime.migration] Running upgrade 295ca54fc2ed -> 65f5e85faf86, empty message
Traceback (most recent call last):
File "C:\venvs\myapi\Lib\site-packages\sqlalchemy\engine\base.py", line 1969, in _exec_single_context
self.dialect.do_execute(
File "C:\venvs\myapi\Lib\site-packages\sqlalchemy\engine\default.py", line 922, in do_execute
cursor.execute(statement, parameters)
sqlite3.IntegrityError: UNIQUE constraint failed: _alembic_tmp_user.username
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "C:\venvs\myapi\Scripts\alembic.exe\__main__.py", line 7, in <module>
File "C:\venvs\myapi\Lib\site-packages\alembic\config.py", line 641, in main
CommandLine(prog=prog).main(argv=argv)
File "C:\venvs\myapi\Lib\site-packages\alembic\config.py", line 631, in main
self.run_cmd(cfg, options)
File "C:\venvs\myapi\Lib\site-packages\alembic\config.py", line 608, in run_cmd
fn(
File "C:\venvs\myapi\Lib\site-packages\alembic\command.py", line 403, in upgrade
script.run_env()
File "C:\venvs\myapi\Lib\site-packages\alembic\script\base.py", line 583, in run_env
util.load_python_file(self.dir, "env.py")
File "C:\venvs\myapi\Lib\site-packages\alembic\util\pyfiles.py", line 95, in load_python_file
module = load_module_py(module_id, path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\venvs\myapi\Lib\site-packages\alembic\util\pyfiles.py", line 113, in load_module_py
spec.loader.exec_module(module) # type: ignore
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap_external>", line 994, in exec_module
File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
File "C:\project\myapi\migrations\env.py", line 81, in <module>
run_migrations_online()
File "C:\project\myapi\migrations\env.py", line 75, in run_migrations_online
context.run_migrations()
File "<string>", line 8, in run_migrations
File "C:\venvs\myapi\Lib\site-packages\alembic\runtime\environment.py", line 948, in run_migrations
self.get_context().run_migrations(**kw)
File "C:\venvs\myapi\Lib\site-packages\alembic\runtime\migration.py", line 627, in run_migrations
step.migration_fn(**kw)
File "C:\project\myapi\migrations\versions\65f5e85faf86_.py", line 23, in upgrade
with op.batch_alter_table('user', schema=None) as batch_op:
File "C:\Users\~~\AppData\Local\Programs\Python\Python312\Lib\contextlib.py", line 144, in __exit__
next(self.gen)
File "C:\venvs\myapi\Lib\site-packages\alembic\operations\base.py", line 398, in batch_alter_table
impl.flush()
File "C:\venvs\myapi\Lib\site-packages\alembic\operations\batch.py", line 164, in flush
batch_impl._create(self.impl)
File "C:\venvs\myapi\Lib\site-packages\alembic\operations\batch.py", line 451, in _create
op_impl._exec(
File "C:\venvs\myapi\Lib\site-packages\alembic\ddl\impl.py", line 207, in _exec
return conn.execute(construct, multiparams)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\venvs\myapi\Lib\site-packages\sqlalchemy\engine\base.py", line 1416, in execute
return meth(
^^^^^
File "C:\venvs\myapi\Lib\site-packages\sqlalchemy\sql\elements.py", line 517, in _execute_on_connection
return connection._execute_clauseelement(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\venvs\myapi\Lib\site-packages\sqlalchemy\engine\base.py", line 1639, in _execute_clauseelement
ret = self._execute_context(
^^^^^^^^^^^^^^^^^^^^^^
File "C:\venvs\myapi\Lib\site-packages\sqlalchemy\engine\base.py", line 1848, in _execute_context
return self._exec_single_context(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\venvs\myapi\Lib\site-packages\sqlalchemy\engine\base.py", line 1988, in _exec_single_context
self._handle_dbapi_exception(
File "C:\venvs\myapi\Lib\site-packages\sqlalchemy\engine\base.py", line 2344, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "C:\venvs\myapi\Lib\site-packages\sqlalchemy\engine\base.py", line 1969, in _exec_single_context
self.dialect.do_execute(
File "C:\venvs\myapi\Lib\site-packages\sqlalchemy\engine\default.py", line 922, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: _alembic_tmp_user.username
[SQL: INSERT INTO _alembic_tmp_user (id, username, password, email) SELECT user.id, user.username, user.password, user.email
FROM user]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
이렇게 떴다. UNIQUE constraint failed 이 에러를 살펴보니
내가 user 테이블에 username, email을 unique=True로 했었는데 예~전에 user테이블 막 만들고 user_create 테스트한다고 APIdocs에서 똑같은 이름으로 user create를 여러 번 눌렀던 기억이 있다. 그래서 sqlite로 테이블 확인해보니까 역시나
똑같은 이름의 user정보가 엄청 많이 저장되어 있었다. 그거 다 지우고 해보니까 잘 돌아갔다!
'Tech > FastAPI' 카테고리의 다른 글
FastAPI Depends 클래스 - Dependency Injection 의존성 주입 (1) | 2024.01.12 |
---|---|
FastAPI - app.get과 router.get 차이 (FastAPI와 APIRouter) (0) | 2024.01.09 |
FastAPI 시작하기 - FastAPI 설치 및 실행 (1) | 2024.01.09 |