How to check if a SQLAlchemy mapping matches the existing tables
I'm using SQLAlchemy's declarative system to define my mapping. Afterwards, I make sure the corresponding tables exist via
Base.metadata.create_all(engine, checkfirst=True)
If I afterwards change one of my declarative classes (for example by adding a column) and run the program again then that change is only detected when I try to commit a session including an instance of that modified class. That happens at a relatively late time during the program's runtime. I would prefer to detect that problem during startup so that I can fail early.
How can I explicitly ask SQLAlchemy to check whether the existing tables match my declarative mapping?
Note that I'm not necessarily looking for how to detect what has changed or how to perform the corresponding migration -- I just want to know whether my tables match my mapping or not.
python sqlalchemy
add a comment |
I'm using SQLAlchemy's declarative system to define my mapping. Afterwards, I make sure the corresponding tables exist via
Base.metadata.create_all(engine, checkfirst=True)
If I afterwards change one of my declarative classes (for example by adding a column) and run the program again then that change is only detected when I try to commit a session including an instance of that modified class. That happens at a relatively late time during the program's runtime. I would prefer to detect that problem during startup so that I can fail early.
How can I explicitly ask SQLAlchemy to check whether the existing tables match my declarative mapping?
Note that I'm not necessarily looking for how to detect what has changed or how to perform the corresponding migration -- I just want to know whether my tables match my mapping or not.
python sqlalchemy
I am not aware of a built in function that will compare your object mapping to your db schema. You may have to use sqlalchemy inspection along with an information_schema query to your db to create your own comparison function.
– benvc
Nov 11 at 0:12
1
You could have a look through the alembic source and see how they do it. If it's a long running script, maybe even trigger an alembic autogenerate at the beginning of your script and check the resulting revision for any changes that it has picked up.. no point reinventing the wheel!
– SuperShoot
Nov 11 at 8:40
add a comment |
I'm using SQLAlchemy's declarative system to define my mapping. Afterwards, I make sure the corresponding tables exist via
Base.metadata.create_all(engine, checkfirst=True)
If I afterwards change one of my declarative classes (for example by adding a column) and run the program again then that change is only detected when I try to commit a session including an instance of that modified class. That happens at a relatively late time during the program's runtime. I would prefer to detect that problem during startup so that I can fail early.
How can I explicitly ask SQLAlchemy to check whether the existing tables match my declarative mapping?
Note that I'm not necessarily looking for how to detect what has changed or how to perform the corresponding migration -- I just want to know whether my tables match my mapping or not.
python sqlalchemy
I'm using SQLAlchemy's declarative system to define my mapping. Afterwards, I make sure the corresponding tables exist via
Base.metadata.create_all(engine, checkfirst=True)
If I afterwards change one of my declarative classes (for example by adding a column) and run the program again then that change is only detected when I try to commit a session including an instance of that modified class. That happens at a relatively late time during the program's runtime. I would prefer to detect that problem during startup so that I can fail early.
How can I explicitly ask SQLAlchemy to check whether the existing tables match my declarative mapping?
Note that I'm not necessarily looking for how to detect what has changed or how to perform the corresponding migration -- I just want to know whether my tables match my mapping or not.
python sqlalchemy
python sqlalchemy
asked Nov 10 at 22:16
Florian Brucker
5,19412653
5,19412653
I am not aware of a built in function that will compare your object mapping to your db schema. You may have to use sqlalchemy inspection along with an information_schema query to your db to create your own comparison function.
– benvc
Nov 11 at 0:12
1
You could have a look through the alembic source and see how they do it. If it's a long running script, maybe even trigger an alembic autogenerate at the beginning of your script and check the resulting revision for any changes that it has picked up.. no point reinventing the wheel!
– SuperShoot
Nov 11 at 8:40
add a comment |
I am not aware of a built in function that will compare your object mapping to your db schema. You may have to use sqlalchemy inspection along with an information_schema query to your db to create your own comparison function.
– benvc
Nov 11 at 0:12
1
You could have a look through the alembic source and see how they do it. If it's a long running script, maybe even trigger an alembic autogenerate at the beginning of your script and check the resulting revision for any changes that it has picked up.. no point reinventing the wheel!
– SuperShoot
Nov 11 at 8:40
I am not aware of a built in function that will compare your object mapping to your db schema. You may have to use sqlalchemy inspection along with an information_schema query to your db to create your own comparison function.
– benvc
Nov 11 at 0:12
I am not aware of a built in function that will compare your object mapping to your db schema. You may have to use sqlalchemy inspection along with an information_schema query to your db to create your own comparison function.
– benvc
Nov 11 at 0:12
1
1
You could have a look through the alembic source and see how they do it. If it's a long running script, maybe even trigger an alembic autogenerate at the beginning of your script and check the resulting revision for any changes that it has picked up.. no point reinventing the wheel!
– SuperShoot
Nov 11 at 8:40
You could have a look through the alembic source and see how they do it. If it's a long running script, maybe even trigger an alembic autogenerate at the beginning of your script and check the resulting revision for any changes that it has picked up.. no point reinventing the wheel!
– SuperShoot
Nov 11 at 8:40
add a comment |
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53243974%2fhow-to-check-if-a-sqlalchemy-mapping-matches-the-existing-tables%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53243974%2fhow-to-check-if-a-sqlalchemy-mapping-matches-the-existing-tables%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
I am not aware of a built in function that will compare your object mapping to your db schema. You may have to use sqlalchemy inspection along with an information_schema query to your db to create your own comparison function.
– benvc
Nov 11 at 0:12
1
You could have a look through the alembic source and see how they do it. If it's a long running script, maybe even trigger an alembic autogenerate at the beginning of your script and check the resulting revision for any changes that it has picked up.. no point reinventing the wheel!
– SuperShoot
Nov 11 at 8:40