Comments (7)
ah ok, looks like create_all()
checks whether tables exist first before creating them https://docs.sqlalchemy.org/en/13/core/metadata.html#sqlalchemy.schema.MetaData.create_all
i guess it'll work fine, as long as you never actually need formal migrations. carry on!
from code.
good question! two-part answer:
-
you'll find the
create_all()
in conftest.py -- for tests, we assume an empty database, so we can create all the tables from scratch -
in a production app, we usually use
alembic
, which is the equivalent ofdjango-migrations
, to generate migrations from the table definitions that currently live inorm.py
. in fact we usually split out a separate file calleddb_tables.py
from code.
Thank you,
I went to check alembic. I think that answers my question.
In my small case I just added a metadata.create_all(engine) and an optional engine parameter to the start_mappers in the orm.py
from code.
In my small case I just added a metadata.create_all(engine) and an optional engine parameter to the start_mappers in the orm.py
I think this will only work if you delete the database and recreate it from scratch every time... let me know how you get on?
from code.
first and most important, I was following the book as a guide meanwhile trying to put together something simpler. I reached chapter 6 before the messaging system was put together.
I haven't tested this enough, but I did something like the following:
-- ui.py or flask_app.py
engine = create_engine(config.get_uri(), echo=True)
orm.start_mappers(engine)
-- orm.py
def start_mappers(engine=None):
(...)
if engine:
metadata.create_all(engine)
-- when db.sqlite3 does not exists, it creates the DB
python ui.py output is:
(sqlalchemy) λ python ui.py
2020-04-14 11:35:25,664 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1
2020-04-14 11:35:25,664 INFO sqlalchemy.engine.base.Engine ()
x2020-04-14 11:35:25,665 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
2020-04-14 11:35:25,665 INFO sqlalchemy.engine.base.Engine ()
2020-04-14 11:35:25,666 INFO sqlalchemy.engine.base.Engine PRAGMA main.table_info("routers")
2020-04-14 11:35:25,666 INFO sqlalchemy.engine.base.Engine ()
2020-04-14 11:35:25,667 INFO sqlalchemy.engine.base.Engine PRAGMA temp.table_info("routers")
2020-04-14 11:35:25,667 INFO sqlalchemy.engine.base.Engine ()
(...)
CREATE TABLE routers (
id INTEGER NOT NULL,
sitename VARCHAR(60),
hostname VARCHAR(60),
region INTEGER,
ip_management VARCHAR(60
(...)
-- A second time running does not create the DB and does not gives an error.
(sqlalchemy) λ python ui.py
2020-04-14 11:49:59,135 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1
2020-04-14 11:49:59,136 INFO sqlalchemy.engine.base.Engine ()
2020-04-14 11:49:59,137 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
2020-04-14 11:49:59,137 INFO sqlalchemy.engine.base.Engine ()
2020-04-14 11:49:59,139 INFO sqlalchemy.engine.base.Engine PRAGMA main.table_info("routers")
2020-04-14 11:49:59,140 INFO sqlalchemy.engine.base.Engine ()
from code.
First, thanks for the awesome book, the best reference ever.
Would you like me to create a PR that mentions that table creation for production is omitted? I've spent a good amount of (enjoyable) time looking through SQLAlchemy docs thinking that I will find the magic function that will somehow scan our metadata
objects and creates the tables automatically :D, until I found this PR
from code.
hey! yes i'd welcome an MR I think -- were you thinking some words of text in the book, or just a comment in the example code somewhere?
from code.
Related Issues (20)
- Error in the tests HOT 3
- A better optimistic concurrency solution HOT 1
- ConnectionError: Need to add both User-Agent header and timeout to requests HOT 5
- Multiply Money NamedTuple in Chapter 1 is no longer a valid operation HOT 1
- django appendix - allocation_set question
- Question: Why there is using a specific model with an abstract repository but not some abstract or base model? HOT 1
- [Question] How would you implement Flask event Listeners? HOT 1
- Using Async Await? HOT 18
- Postgre/API never came up HOT 2
- Listing or returning items with UoW raises sqlalchemy.orm.exc.DetachedInstanceError HOT 2
- Psycopg2 error: Symbol not found _PQbackendPID HOT 1
- Chapter 4: we do `session.commit()` but do we have any changes to commit? HOT 2
- Is there a reason why we don't use sql alchemy orm to create database models? HOT 1
- FastAPI, asynchronous ORM HOT 3
- Chapter 13. Dependency Injection use same uow concurrently in entrypoint? HOT 2
- what's the purpose of line_allocated_event for redis? HOT 1
- Python
- 477143
- pip install requirements.txt doesn't work anymore HOT 1
- cloning of branches HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from code.