On Thu, Jul 20, 2017 at 5:35 AM, Fredrik Blomqvist
<[email protected]> wrote:
> There seems to be surprisingly little information about how to load a table
> manually if you set the autoload flag to False.
> There is a fairly new question on StackOverflow that has not been answered
> properly either: https://stackoverflow.com/q/43042044/998919.
> Is there a function (e.g. ".load()") that can be called to load a table that
> has not been loaded yet?
hi there -
this can be satisfied using the extend_existing flag:
t = Table("sometable", metadata)
Table("somedata", autoload_with=engine, extend_existing=True)
http://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.Table.params.extend_existing
>
> A use-case for this is the following:
>
> You have two sets of tables: A and B.
>
> A: Depends on no-one
> B: Cannot be created with SQLAlchemy (e.g. PostgreSQL views) and depend on
> A.
>
> If you then want to reflect B, we can call those a set of objects C.
>
> C is clearly dependent on B. However, when A is created (using e.g.
> create_all()) SQLAlchemy first loads C. If autoload is true on C, the
> program will error out.
>
> If you could instead choose to load C later, this scenario could still work
> out.
>
> Any thoughts?
I'm not following:
"You have two sets of tables: A and B." OK
"B: Cannot be created with SQLAlchemy (e.g. PostgreSQL views) and
depend on A." OK...then B is *not* a table, it is a view. I think
here we need to distinguish between SQLAlchemy in Python Table()
(which would load for B) and "CREATE TABLE" vs. "CREATE VIEW" in the
database.
"A: "depends on no-one"", ok so lets say A is a "CREATE TABLE A" in
the database
"When A is created (e.g. using create_all()" - OK, then there has been
no "CREATE TABLE", you just have Table, OK, there is no "A" in the
database (so why are we using reflection?)
"SQLAlchemy first loads C" - OK I think there is some confusion here.
"create_all()" emits CREATE TABLE, it does not "load" tables (other
than checking if each immediate table exists). you call
"create_all()" when you only have Python Table objects that weren't
created in the database
"If you then want to reflect B, we can call those a set of objects C."
- I don't understand this sentence. if B is "CREATE VIEW B AS
SELECT ....", what is C? another view that depends on B ?
It would be much clearer if you could illustrate with code what you
are trying to do. thanks!
>
> --
> SQLAlchemy -
> The Python SQL Toolkit and Object Relational Mapper
>
> http://www.sqlalchemy.org/
>
> To post example code, please provide an MCVE: Minimal, Complete, and
> Verifiable Example. See http://stackoverflow.com/help/mcve for a full
> description.
> ---
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
--
SQLAlchemy -
The Python SQL Toolkit and Object Relational Mapper
http://www.sqlalchemy.org/
To post example code, please provide an MCVE: Minimal, Complete, and Verifiable
Example. See http://stackoverflow.com/help/mcve for a full description.
---
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.