Yes, I'm using Declarative. I was following a great tutorial, then
realized it was way out of date. The one recommended on the forum I
found said to use Declarative, so I did.

In DBInterface, I have this little function:

def getAllTables():
 return base.metadata.tables
#end def getAllTables

I then loop over that array, grabbing the value only and ignoring the
key. I just tried printing the type, as in:

def getAllTables():
 for table in base.metadata.tables.values():
  print type(table)
 return base.metadata.tables
#end def getAllTables

I got <class 'sqlalchemy.sql.schema.Table'> Here's the loop that
generates the table list passed to my GUI (remember that this must be
an array of arrays):

  tables = DBInterface.getAllTables()
  tablesList = []
  for table in tables.values():
   tablesList.append([table])
  #end for

Just to be sure, I stuck a "print type(table)" statement in that for
loop, and the objects are still sqlalchemy.sql.schema.Table objects.

On 2/4/16, Simon King <si...@simonking.org.uk> wrote:
> SQLAlchemy has 2 main layers, the "Core" layer which deals with mostly
> database-level constructs, such as Tables, and the ORM layer, which is
> built on top of Core. With the ORM, you map your own classes onto the
> lower-level Tables, then work with instances of those classes. You appear
> to be using the declarative system to define your classes, so SQLAlchemy
> will be creating the associated Table instances for you under the hood.
>
> In your example, Customer is an ORM-level class. Somewhere, there will be a
> construct representing the Core-level Table that the Customer class is
> mapped to. (It's probably available at Customer.__table__, but also in
> other places).
>
> When you say that "self.choices" contains table objects, I suspect that
> those are the Core-level Table instances. When you query using those, you
> don't get Customer objects back. You need to query using the Customer class
> instead. Can you get the Customer class into your self.choices array,
> either instead of the table, or as well as? Where are you getting the
> object that you are putting in the first element of each of the
> self.choices list?
>
> Simon
>
> On Thu, Feb 4, 2016 at 11:34 AM, Alex Hall <ah...@autodist.com> wrote:
>
>> It's all from a GUI, so it's something like this (my code isn't in front
>> of me):
>> DBInterface.session"query(self.choices[self.selectedIndex][0]).all()
>> Choices is a 2D array where the first (0th) element of each sub-array is
>> a
>> table object. The query works, because I get the records as expected and
>> can display them or inspect them. I just can't modify them for some
>> reason.
>> As I said, though, I'm new to this package so am likely missing an
>> obvious
>> step, or have something set up very wrong.
>>
>> Sent from my iPhone
>>
>> > On Feb 3, 2016, at 16:18, Simon King <si...@simonking.org.uk> wrote:
>> >
>> > OK, so you’re not actually getting Customer objects back from your
>> query. What does your call to session.query() look like? For this to
>> work,
>> it really ought to be something like “session.query(Customer)”. I suspect
>> you are doing something like “session.query(Customer.id, Customer.name,
>> …)”
>> instead.
>> >
>> > Simon
>> >
>> >> On 3 Feb 2016, at 17:43, Alex Hall <ah...@autodist.com> wrote:
>> >>
>> >> I'm on the Gmail site, so am not sure I can reply in-line. Sorry.
>> >>
>> >> This is a basic table class, like
>> >> class Customer(base):
>> >> __tablename__ = "customers"
>> >> name = Column(String(50)),
>> >> ...
>> >>
>> >> When I print the type:
>> >> <class 'sqlalchemy.util._collections.result'>
>> >> And repr():
>> >> (2, u'Powersports Etc', 5554443210L, u'ahall+dbte...@autodist.com',
>> True)
>> >>
>> >>
>> >>> On 2/3/16, Simon King <si...@simonking.org.uk> wrote:
>> >>>> On Wed, Feb 3, 2016 at 3:54 PM, Alex Hall <ah...@autodist.com>
>> >>>> wrote:
>> >>>>
>> >>>> Hello list,
>> >>>> I'm new to SQLAlchemy, but not to Python. I have an application
>> >>>> that's
>> >>>> coming together, and relies on SQLAlchemy to talk to a database for
>> >>>> many of the app's functions. Listing tables, listing records,
>> >>>> updating
>> >>>> records, pulling records for internal use, and so on.
>> >>>>
>> >>>> My app is working, but so far I've been writing the framework and
>> >>>> GUI
>> >>>> with a bit of SQLite just to check that things are working how I
>> >>>> want.
>> >>>> Now, though, I'm getting into my first "real" user-facing database
>> >>>> task: taking the values from a dialog and updating a record
>> >>>> according
>> >>>> to those values. Thus far, I'm having no luck.
>> >>>>
>> >>>> My organization for now is DBInterface.py, which holds all my table
>> >>>> definitions, database details, and my base, session, and engine
>> >>>> objects. I can hear the groans from here; I do plan to move the
>> >>>> table
>> >>>> definitions into a module of their own at some point, there simply
>> >>>> hasn't been a need yet. GUIManager.py imports DBInterface, and
>> >>>> handles
>> >>>> all the GUI stuff, as the name suggests. It's where, eventually,
>> >>>> I'll
>> >>>> take user input and use it to update records by calling functions
>> >>>> from
>> >>>> DBInterface. That's the problem, though. In GUIManager, I have a
>> >>>> simple test:
>> >>>>
>> >>>> self.records[self.selectedRecordIndex].name="test name" #records is
>> >>>> the list of objects returned by querying the current table
>> >>>>
>> >>>> Which errors out every time:
>> >>>> AttributeError: can't set attribute
>> >>>>
>> >>>> (Yes, "name" is an attribute name of my Customer class.) From what
>> >>>> I've read thus far, updating records is as easy as modifying their
>> >>>> properties and calling session.commit(). That isn't working, though.
>> >>>> I
>> >>>> imagine the problem is that the records in a query aren't the same
>> >>>> as
>> >>>> the records originally created, and modify/commit only works on
>> >>>> those
>> >>>> originals. I'm not sure if that's right, though. If it is, how could
>> >>>> I
>> >>>> modify the originals, given that I run a new query each time the
>> >>>> user
>> >>>> selects a table name in my GUI's list of names? If I'm wrong, how
>> >>>> would I update the record attributes and save the changes back to
>> >>>> the
>> >>>> database? I think I'm picturing this whole thing wrong, to be
>> >>>> honest.
>> >>>> Thanks for any help, and please let me know if I need to provide
>> >>>> more
>> >>>> code or context.
>> >>> Is your query against a single mapped class, or is it against some
>> >>> set
>> of
>> >>> columns? What do you get if you write:
>> >>>
>> >>> print type(self.records[self.selectedRecordIndex])
>> >>> print repr(self.records[self.selectedRecordIndex])
>> >>>
>> >>> ...at the point where you are trying to set the name?
>> >>>
>> >>> Simon
>> >>>
>> >>> --
>> >>> 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 sqlalchemy+unsubscr...@googlegroups.com.
>> >>> To post to this group, send email to sqlalchemy@googlegroups.com.
>> >>> Visit this group at https://groups.google.com/group/sqlalchemy.
>> >>> For more options, visit https://groups.google.com/d/optout.
>> >>
>> >> --
>> >> 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 sqlalchemy+unsubscr...@googlegroups.com.
>> >> To post to this group, send email to sqlalchemy@googlegroups.com.
>> >> Visit this group at https://groups.google.com/group/sqlalchemy.
>> >> For more options, visit https://groups.google.com/d/optout.
>> >
>> > --
>> > 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 sqlalchemy+unsubscr...@googlegroups.com.
>> > To post to this group, send email to sqlalchemy@googlegroups.com.
>> > Visit this group at https://groups.google.com/group/sqlalchemy.
>> > For more options, visit https://groups.google.com/d/optout.
>>
>> --
>> 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 sqlalchemy+unsubscr...@googlegroups.com.
>> To post to this group, send email to sqlalchemy@googlegroups.com.
>> Visit this group at https://groups.google.com/group/sqlalchemy.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
> --
> 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 sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at https://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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 sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to