I was re-reading your email, and realized I forgot to answer something
(sorry, it's early here). It looks like I am indeed passing the table
to session.query, which works, but then I'm trying to change
attributes of the table, which doesn't (of course). Could I do this?

#DBDefinitions.py
import sqlalchemy
from sqlalchemy.ext.declarative import declarative_base
base = declarative_base()

class Customer(base):
 ......

class MyOtherTable(base):
 ......

#DDInterface.py
import DBDefinitions
import sqlalchemy

#set up the database--session, engine, etc

DBDefinitions.base.metadata.create_all(myEngine) #should create the
empty tables, right?

#main.py
from DBDefinitions import *
import DBInterface

c1 = Customer(...)
c2 = Customer(...)
mt1 = MyOtherTable(...)
if DBInterface.session.query(DBDefinitions.Customer).count == 0:
DBInterface.session.add_all([c1, c2])


On 2/4/16, Alex Hall <ah...@autodist.com> wrote:
> 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