How to check if a SQLAlchemy mapping matches the existing tables












3














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.










share|improve this question






















  • 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
















3














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.










share|improve this question






















  • 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














3












3








3







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.










share|improve this question













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






share|improve this question













share|improve this question











share|improve this question




share|improve this question










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


















  • 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

















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
});


}
});














draft saved

draft discarded


















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
















draft saved

draft discarded




















































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.




draft saved


draft discarded














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





















































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







這個網誌中的熱門文章

Xamarin.form Move up view when keyboard appear

Post-Redirect-Get with Spring WebFlux and Thymeleaf

Anylogic : not able to use stopDelay()