UPDATE!
I have gone to the mssql server, manually added a new primary key to the table I was looking for. I used the following SQL code if anyone is interested: ALTER TABLE AssetCashFlows ADD ID INT IDENTITY; ## Then I had to do a second query, to transform ID into a primary key. ALTER TABLE AssetCashFlows ADD PRIMARY KEY (ID); After doing this I had a primary key ready and then to find the table using ORM I had to use the following: Base = automap_base() Base.prepare(engine, reflect=True, schema="dbo") Base.classes.keys() ## You could have also done: meta = MetaData(engine, schema="dbo") Base = automap_base(metadata= meta) Base.prepare(engine, reflect=True) ## OR - This one showed me all the tables, not only the "dbo" ones meta = MetaData() meta.reflect(bind=engine, schema="dbo") Base = automap_base(metadata= meta) Base.prepare(engine, reflect=True) ## OR Base = automap_base() Base.metadata = MetaData(engine, schema="dbo") Base.prepare(engine, reflect=True) All of these work for me. Hope that helps someone, and thanks Mike for the help. Kind Regards On Thursday, 28 November 2019 10:05:54 UTC, Felipe Araya Olea wrote: > > Hello Mike, > > > Thanks for your answer. I think I am definitely closer to find the > solution thanks to your comments, I created a new table in mssql without > using any pre-existing schema and also making sure it has a primary key. I > managed to find that table using the code I showed you above and map it, I > couldn't find the "dbo" tables though, however, you are right, I think it > has to do with the primary keys. > > So, if I understand correctly, you are saying that I will have to create > the class manually and specify there the primary key? In other words, I > can't reflect that table from the database to a Python class? This table > that I am trying to reflect has 30+ columns, I think that will be a bit > hard, any suggestions for this? > > Thanks for helping me by the way, much appreciated. > > Hope you are having a good day. > > Kind Regards > > > > > > On Wednesday, 27 November 2019 21:57:41 UTC, Mike Bayer wrote: >> >> right so, automap requires that the tables have primary key constraints >> on them, otherwise they won't show up as mapped classes. So you'd need >> to define the declarative classes you are interested in and establish which >> columns would be used for primary keys on each if there is no primary key >> constraint coming from the table itself. >> >> >> >> >> >> On Wed, Nov 27, 2019, at 3:55 PM, Felipe Araya Olea wrote: >> >> One thing I forgot to mention. >> >> This is not my personal database, this is my company's database, so maybe >> there are some restrictions and permissions that might play a part, >> although, if I use the engine as it is, it works, if I change even the >> smallest thing, I get an error saying access denied, so the log in is >> working as far as I can tell, the only thing that I have had changed >> depending if I am using CORE or ORM is the DNS (it was throwing me an error >> with CORE, so I commented out), >> >> I can see that the output of the "echo" says "guest" instead of >> "Felipe.Araya", which is strange, isn't it, I don't really understand why >> that might be happening since the log in seems to be working. >> >> >> Hope you are having a good day. >> >> Looking forward to hearing back from you. >> >> >> >> >> >> On Wednesday, 27 November 2019 20:36:48 UTC, Felipe Araya Olea wrote: >> >> Hello Mike, >> >> Thanks for replying so quickly, I appreciate that. Below is the engine I >> am using and the output of the code you mentioned: >> >> >> >> params = urllib.parse.quote_plus('Driver={SQL Server};'\ >> "Server=*******;"\ >> "DSN=TreasuryMSSQL;" >> "Trusted_Connection=yes;" >> "UID=Felipe.Araya;" >> "PWD=*******," >> ) >> engine = db.create_engine("mssql+pyodbc:///?odbc_connect=%s" % params, >> echo=debug) >> >> insp = inspect(engine) >> print(insp.get_table_names()) >> >> >> >> # I know you mentioned that "dbo" shouldn't be specified since it comes >> by default, but if I don't specify a simply get nothing, in fact the only >> way in which I have succeeded reflecting the table from mssql was using >> CORE and specifying "dbo" in MetaData(engine, schema="dbo"), otherwise it >> wouldn't work, something similar happened when I wanted to map a class from >> the domain to the database the only way in which I could do it was by doing: >> >> class User(Base): >> id ... >> name..... >> >> User.__table__.schema = "dbo" >> >> Base.metadata.create_all()engine >> >> >> btw: I have binge-watched a couple of your 3hr videos on Youtube, they >> are great man, thanks for those! >> >> >> # Here is the output of the "echo" >> >> 2019-11-27 20:03:44,722 INFO sqlalchemy.engine.base.Engine SELECT >> CAST(SERVERPROPERTY('ProductVersion') AS VARCHAR) >> INFO:sqlalchemy.engine.base.Engine:SELECT >> CAST(SERVERPROPERTY('ProductVersion') AS VARCHAR) 2019-11-27 20:03:44,724 >> INFO sqlalchemy.engine.base.Engine () INFO:sqlalchemy.engine.base.Engine:() >> 2019-11-27 20:03:44,736 DEBUG sqlalchemy.engine.base.Engine Col ('',) >> DEBUG:sqlalchemy.engine.base.Engine:Col ('',) 2019-11-27 20:03:44,738 DEBUG >> sqlalchemy.engine.base.Engine Row ('12.0.2000.8',) >> DEBUG:sqlalchemy.engine.base.Engine:Row ('12.0.2000.8',) 2019-11-27 >> 20:03:44,739 INFO sqlalchemy.engine.base.Engine SELECT schema_name() >> INFO:sqlalchemy.engine.base.Engine:SELECT schema_name() 2019-11-27 >> 20:03:44,740 INFO sqlalchemy.engine.base.Engine () >> INFO:sqlalchemy.engine.base.Engine:() 2019-11-27 20:03:44,746 DEBUG >> sqlalchemy.engine.base.Engine Col ('',) >> DEBUG:sqlalchemy.engine.base.Engine:Col ('',) 2019-11-27 20:03:44,747 DEBUG >> sqlalchemy.engine.base.Engine Row ('guest',) >> DEBUG:sqlalchemy.engine.base.Engine:Row ('guest',) 2019-11-27 20:03:44,754 >> INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS >> VARCHAR(60)) AS anon_1 INFO:sqlalchemy.engine.base.Engine:SELECT CAST('test >> plain returns' AS VARCHAR(60)) AS anon_1 2019-11-27 20:03:44,755 INFO >> sqlalchemy.engine.base.Engine () INFO:sqlalchemy.engine.base.Engine:() >> 2019-11-27 20:03:44,760 INFO sqlalchemy.engine.base.Engine SELECT >> CAST('test unicode returns' AS NVARCHAR(60)) AS anon_1 >> INFO:sqlalchemy.engine.base.Engine:SELECT CAST('test unicode returns' AS >> NVARCHAR(60)) AS anon_1 2019-11-27 20:03:44,762 INFO >> sqlalchemy.engine.base.Engine () INFO:sqlalchemy.engine.base.Engine:() >> 2019-11-27 20:03:44,774 INFO sqlalchemy.engine.base.Engine SELECT >> [INFORMATION_SCHEMA].[TABLES].[TABLE_NAME] FROM >> [INFORMATION_SCHEMA].[TABLES] WHERE >> [INFORMATION_SCHEMA].[TABLES].[TABLE_SCHEMA] = CAST(? AS NVARCHAR(max)) AND >> [INFORMATION_SCHEMA].[TABLES].[TABLE_TYPE] = CAST(? AS NVARCHAR(max)) ORDER >> BY [INFORMATION_SCHEMA].[TABLES].[TABLE_NAME] >> INFO:sqlalchemy.engine.base.Engine:SELECT >> [INFORMATION_SCHEMA].[TABLES].[TABLE_NAME] FROM >> [INFORMATION_SCHEMA].[TABLES] WHERE >> [INFORMATION_SCHEMA].[TABLES].[TABLE_SCHEMA] = CAST(? AS NVARCHAR(max)) AND >> [INFORMATION_SCHEMA].[TABLES].[TABLE_TYPE] = CAST(? AS NVARCHAR(max)) ORDER >> BY [INFORMATION_SCHEMA].[TABLES].[TABLE_NAME] 2019-11-27 20:03:44,776 INFO >> sqlalchemy.engine.base.Engine ('guest', 'BASE TABLE') >> INFO:sqlalchemy.engine.base.Engine:('guest', 'BASE TABLE') 2019-11-27 >> 20:03:44,785 DEBUG sqlalchemy.engine.base.Engine Col ('TABLE_NAME',) >> DEBUG:sqlalchemy.engine.base.Engine:Col ('TABLE_NAME',) >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> On Wednesday, 27 November 2019 20:02:07 UTC, Mike Bayer wrote: >> >> >> >> On Wed, Nov 27, 2019, at 2:45 PM, Felipe Araya Olea wrote: >> >> Hello, >> >> I am having problems reflecting my tables from the MS SQL Server database >> that have the schema "dbo". I have tried using the following code. >> >> >> "dbo" is the default schema and usually does not need to be part of the >> arguments that you provide to Metadata or reflect. >> >> To debug a reflection operation, set echo='debug' on create_engine(), >> then look at the queries being emitted as well as the results that come >> back . For a quicker test, just do a get_table_names: >> >> from sqlalchemy import inspect >> engine = create_engine("...", echo='debug') >> >> insp = inspect(engine) >> print(insp.get_table_names()) >> >> the INFO/DEBUG output will show the queries being emitted and the results >> returned. You want to make sure the get table names looks something like >> mine, where I log in as "scott": >> >> SELECT [INFORMATION_SCHEMA].[TABLES].[TABLE_NAME] >> FROM [INFORMATION_SCHEMA].[TABLES] >> WHERE [INFORMATION_SCHEMA].[TABLES].[TABLE_SCHEMA] = CAST(? AS >> NVARCHAR(max)) AND [INFORMATION_SCHEMA].[TABLES].[TABLE_TYPE] = CAST(? AS >> NVARCHAR(max)) ORDER BY [INFORMATION_SCHEMA].[TABLES].[TABLE_NAME] >> 2019-11-27 14:59:02,092 INFO sqlalchemy.engine.base.Engine ('scott', >> 'BASE TABLE') >> 2019-11-27 14:59:02,104 DEBUG sqlalchemy.engine.base.Engine Col >> ('TABLE_NAME',) >> 2019-11-27 14:59:02,105 DEBUG sqlalchemy.engine.base.Engine Row ('foo',) >> >> the engine gets the name "scott" or "dbo" by invoking the command >> "schema_name". >> >> if you show me the output of the command "SELECT schema_name" using the >> exact ODBC connection you are using and also what schema your tables are >> under inside of information_schema.tables we can determine what the correct >> schema name argument should be. >> >> >> >> >> >> >> >> >> >> >> engine = db.create_engine("mssql+pyodbc:///?odbc_connect=%s" % params) # >> Engine works, because I have tested it using CORE >> meta = MetaData(schema="dbo") # I have tried binding it to engine as well >> meta.reflect(bind=engine, schema="dbo") # I have tried without this line >> as well >> Base = automap_base(metadata=meta) >> Base.prepare(engine, reflect=True) >> >> ### That seemed to work fine, I get no errors, however, if I try to >> retrieve the name of the tables I can't see them: >> Base.classes.keys() >> >>> [] >> >> >> I have seen that the problem could be that the table doesn't have a >> primary key, however that is not the problem, because I have multiple >> tables under the schema "dbo" and they have primary keys. >> >> >> If anyone knows a solution please let me know, I will be eternally >> grateful. >> >> >> >> -- >> 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 sqlal...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/sqlalchemy/d145fd44-5ffd-427b-869f-84d2cbd0bab1%40googlegroups.com >> >> <https://groups.google.com/d/msgid/sqlalchemy/d145fd44-5ffd-427b-869f-84d2cbd0bab1%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> >> >> >> -- >> 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 sqlal...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/sqlalchemy/070d905f-8dd9-4d4f-8d41-c65c5ab5686d%40googlegroups.com >> >> <https://groups.google.com/d/msgid/sqlalchemy/070d905f-8dd9-4d4f-8d41-c65c5ab5686d%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> >> >> -- 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 sqlalchemy+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sqlalchemy/89371b57-2287-47d4-a716-dcbb869b4fc8%40googlegroups.com.