Sorry, do you mean the base subclass, or a new table class? In either case, I'm not sure I see how this will fit into my automapping code. I know this is all fairly basic, I just can't quite picture what goes where and what inherits from/gets passed to what to make it automap this VENDR table. If I could, I'd just add a PK column to the table itself. Sadly, I can't change that kind of thing, only query it.
On 3/11/16, Mike Bayer <clas...@zzzcomputing.com> wrote: > just make the class and include the PK column, then automap. the rest > of the columns should be filled in. > > > On 03/11/2016 04:14 PM, Alex Hall wrote: >> Ah, you're right. Every other table I've used in this database has had >> a key, and I didn't even notice that this VENDR table lacks one. That >> explains the mystery! Thanks. >> >> Now to map this table. I've read the section of the docs on doing >> this, and I get that I subclass base, set __table__ to be my VENDR >> table, then set the key in my subclass. My question is how I access >> the table, given that I can't automap it first. That is, if I can't >> map the table because it has no PK, to what do I set __table__ in the >> subclass that will let me map the table? >> >> One post I found suggested something like this: >> >> vendorTable = Table("VENDR", metadata, column("PVVNNO", >> primary_key=True)) >> >> I'm guessing I'd have to add the column definitions for the other >> columns if I did that. I'm further guessing that this replaces the >> docs' method of subclassing, since the PK is now set. However, I don't >> know if this would still work with automapping. >> >> On 3/11/16, Mike Bayer <clas...@zzzcomputing.com> wrote: >>> ah. does VENDR have a primary key? it won't be mapped if not. >>> >>> what's in base.classes.keys() ? base.classes['VENDR'] ? >>> >>> >>> >>> >>> >>> >>> On 03/11/2016 12:47 PM, Alex Hall wrote: >>>> VENDR is right there, in base.classes and metadata.tables. Yet, >>>> vendorTable = base.classes.VENDR >>>> raises an AttributeError. Odd! There's nothing cap-sensitive about >>>> __hasattr__ that I'm forgetting, is there? Or, could I somehow alias >>>> the name before I try to access it, if that would help at all? This is >>>> the only table in the CMS to have a name in all caps, but I need to >>>> access it to look up manufacturer details for items. >>>> >>>> On 3/11/16, Mike Bayer <clas...@zzzcomputing.com> wrote: >>>>> >>>>> can you look in metadata.tables to see what it actually reflected ? >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> On 03/11/2016 12:09 PM, Alex Hall wrote: >>>>>> That's weird: the name I see is exactly what I've been using, >>>>>> "VENDR". >>>>>> All caps and everything. I tried using lowercase, just to see what it >>>>>> would do, but it failed. >>>>>> >>>>>> On 3/11/16, Mike Bayer <clas...@zzzcomputing.com> wrote: >>>>>>> >>>>>>> >>>>>>> On 03/11/2016 09:39 AM, Alex Hall wrote: >>>>>>>> Hello list, >>>>>>>> Finally, a pure SA question from me. I'm using Automap and the >>>>>>>> "only" >>>>>>>> keyword to automap a subset of the tables in our CMS database. This >>>>>>>> has worked perfectly thus far. Now, though, it's failing on a >>>>>>>> specific >>>>>>>> table, and the only difference I can see is that this table's name >>>>>>>> is >>>>>>>> in all caps, whereas the rest are all lowercase. Capitalization >>>>>>>> shouldn't matter, right? >>>>>>> >>>>>>> it does, as ALLCAPS is case sensitive and indicates quoting will be >>>>>>> used. How to handle this depends on the exact name that's in the >>>>>>> database and if it truly does not match case-insensitively. >>>>>>> >>>>>>> Examine the output of: >>>>>>> >>>>>>> inspect(engine).get_table_names() >>>>>>> >>>>>>> find your table, and that's the name you should use. >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> Stranger still, the actual reflection doesn't >>>>>>>> error out. Later, where I try to assign base.classes.MYTABLE to a >>>>>>>> variable, is where I get an AttributeError. Here's my code: >>>>>>>> >>>>>>>> engine = sqlalchemy.create_engine("mssql+pyodbc://%s:%s@%s" >>>>>>>> %(username, password, dsn)) >>>>>>>> base = automap_base() >>>>>>>> session = Session(engine) >>>>>>>> metadata = sqlalchemy.MetaData() >>>>>>>> desiredTables = ["table", "othertable", "VENDR"] >>>>>>>> metadata.reflect(engine, only=desiredTables) #works fine >>>>>>>> >>>>>>>> table = base.classes.table #fine >>>>>>>> table2 = base.classes.othertable #fine >>>>>>>> vendorTable = base.classes.VENDR #AttributeError >>>>>>>> >>>>>>>> I've added and removed tables as I adjust this script, and all of >>>>>>>> them >>>>>>>> work perfectly. This VENDR table is the first one in two days to >>>>>>>> cause >>>>>>>> problems. If I iterate over all the classes in base.classes and >>>>>>>> print >>>>>>>> each one, I don't even see it in that list, so SA isn't simply >>>>>>>> transforming the name. This is probably a simple thing, but I don't >>>>>>>> see the problem. Thanks for any suggestions. >>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> 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.