Open KazuyukiSomeya opened 2 years ago
別の問題 https://qiita.com/penpenta/items/c993243c4ceee3840f30 のalembic init で生成されたはずのversionsディレクトリがgithubのリポジトリに作成されてないため、単純にgit cloneした状態で alembic revision -m {ファイル名} を実行すると失敗する。 gitはディレクトリをバージョン管理の対象にしないので、空のディレクトリはcommitされない。 空のディレクトリをgitで管理したい場合は、 .gitkeep gitkeep などダミーのファイルを作成して管理対象とする習慣がある。
↑ ただ、今回は作成したモデルからマイグレーションファイルを作成するので、その手順でやれば手動で作る必要はない。
SQLAlchemy のモデルの定義 ↓ env.py の編集 ↓ autogenerate を使用した migration の実行
上記に加えて、alembic.ini でデータベース接続文字列も実際のものに変更する必要がある。 sqlalchemy.url = driver://user:pass@localhost/dbname
エラーコードです
codeserver@7d4ff92b16c6:/workspace/-/back$ alembic revision --autogenerate -m "create table"
Traceback (most recent call last):
File "/home/codeserver/.asdf/installs/python/3.10.6/bin/alembic", line 8, in
エラーが起きるようになった原因 env.pyにデータベースモデルに対してマイグレーションを作成するよう追記
追記したコード from models.models_professor import models_professor from models.models_students import models_students from models.models_lecture import models_lecture from models.models_course import models_course
target_metadata = [Professor.metadata, Student.metadata, Lecture.metadata, Course.metadata]
引数がtypoしていると思う。("Index"とか"Primary_key"とかが大文字になっている) https://github.com/webfrontier-intern-2022/-/blob/5a257895dfb7a2b77fd925302479315e4cb78299/back/models/models_professor.py#L13
id = Column('id', Integer, primary_key=True, autoincrement=True) ★プライマリーキーはそもそもindex張られるはずなので、indexは不要 email = Column('email', String(255), index=True, unique=True)
とか。他のモデルも同様。
というか、その前にColumn名の指定がないからか。 https://docs.sqlalchemy.org/en/14/core/metadata.html#sqlalchemy.schema.Column.params.name
alembic.iniが見つからない問題は再現できず。
ターミナルでalembic.iniがあるディレクトリに移動して実施しているか確認してください。 codeserver@73def84d079c:~/workspace/samples/master$ ls -l total 36 -rw-r--r-- 1 codeserver codeserver 422 9月 22 15:38 App.js -rw-r--r-- 1 codeserver codeserver 3219 9月 22 15:38 alembic.ini -rw-r--r-- 1 codeserver codeserver 890 9月 22 15:38 authenticate.py -rw-r--r-- 1 codeserver codeserver 964 9月 22 15:38 crud.py -rw-r--r-- 1 codeserver codeserver 432 9月 22 15:38 database.py drwxr-xr-x 3 codeserver codeserver 4096 9月 22 19:26 migration -rw-r--r-- 1 codeserver codeserver 2135 9月 22 15:38 models.py -rw-r--r-- 1 codeserver codeserver 451 9月 22 15:38 schemas.py -rw-r--r-- 1 codeserver codeserver 39 9月 22 15:38 t.txt
それでもダメなら下記の -c オプションで設定ファイルを指定できるので、指定して試して見てください。
codeserver@73def84d079c:~/workspace/samples/master$ alembic -h usage: alembic [-h] [--version] [-c CONFIG] [-n NAME] [-x X] [--raiseerr] {branches,current,downgrade,edit,ensure_version,heads,history,init,list_templates,merge,revision,show,stamp,upgrade} ...
positional arguments: {branches,current,downgrade,edit,ensure_version,heads,history,init,list_templates,merge,revision,show,stamp,upgrade} branches Show current branch points. current Display the current revision for a database. downgrade Revert to a previous version. edit Edit revision script(s) using $EDITOR. ensure_version Create the alembic version table if it doesn't exist already . heads Show current available heads in the script directory. history List changeset scripts in chronological order. init Initialize a new scripts directory. list_templates List available templates. merge Merge two revisions together. Creates a new migration file. revision Create a new revision file. show Show the revision(s) denoted by the given symbol. stamp 'stamp' the revision table with the given revision; don't run any migrations. upgrade Upgrade to a later version.
options: -h, --help show this help message and exit --version show program's version number and exit -c CONFIG, --config CONFIG Alternate config file; defaults to value of ALEMBIC_CONFIG environment variable, or "alembic.ini" -n NAME, --name NAME Name of section in .ini file to use for Alembic config -x X Additional arguments consumed by custom env.py scripts, e.g. -x setting1=somesetting -x setting2=somesetting --raiseerr Raise a full stack trace on error