I used the GitHub search to find a similar issue and didn't find it.
I searched the SQLModel documentation, with the integrated search.
I already searched in Google "How to X in SQLModel" and didn't find any information.
I already read and followed all the tutorial in the docs and didn't find an answer.
I already checked if it is not related to SQLModel but to Pydantic.
I already checked if it is not related to SQLModel but to SQLAlchemy.
Commit to Help
I commit to help with one of those options 👆
Example Code
Nocodeinvolved
Description
Moving create_all to function here just prevents creation on first import. Python modules are executed only once, you can check it yourself.
So statement "If SQLModel.metadata.create_all(engine) was not in a function and we tried to import something from this module (from this file) in another, it would try to create the database and table every time." is wrong ("every time" in particular).
It is a fair point. I didn't read it the same way as you, but potentially it could be clearer.
I read that to mean: If you import the module in a given run-time, it will execute the code and create the database and table. This will happen every time that run-time is started.
I didn't read it as: In a given run-time, every time the module is imported it will create the database and tables.
@obassett I get your point, but if you want to prevent creation on every run, you should remove this "create_all", not to extract it to the function. The function is called on every run in the example anyway, because main is executed every time
Thanks for the discussion! I added #426 to improve the text. If you feel like there's something else to be done, please let me know. If it seems clearer to you now, you can close the issue. ☕
Activity
obassett commented on Aug 27, 2021
It is a fair point. I didn't read it the same way as you, but potentially it could be clearer.
I read that to mean: If you import the module in a given run-time, it will execute the code and create the database and table. This will happen every time that run-time is started.
I didn't read it as: In a given run-time, every time the module is imported it will create the database and tables.
But it maybe could be clearer.
vimhead commented on Aug 27, 2021
@obassett I get your point, but if you want to prevent creation on every run, you should remove this "create_all", not to extract it to the function. The function is called on every run in the example anyway, because main is executed every time
Merge pull request fastapi#34 from leynier/fork-7
tiangolo commented on Aug 30, 2022
Thanks for the discussion! I added #426 to improve the text. If you feel like there's something else to be done, please let me know. If it seems clearer to you now, you can close the issue. ☕
github-actions commented on Sep 10, 2022
Assuming the original need was handled, this will be automatically closed now. But feel free to add more comments or create new issues or PRs.