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.