My code is as follows:
import urllib
import sqlalchemy
from sqlalchemy.orm import sessionmaker, scoped_session
def list_dbs():
sql = """
use master;
SELECT name
FROM sys.databases;
"""
try:
odbc_connect = "DRIVER={SQL Server};Server=localhost;Database=master;port=1433"
engine = sqlalchemy.create_engine("mssql+pyodbc:///?odbc_connect=%s" % urllib.quote_plus(odbc_connect),
echo=True, connect_args={'autocommit': True})
SessionFactory = sessionmaker(bind=engine)
session = scoped_session(SessionFactory)
result = session.execute(sql)
for v in result:
print(v)
except Exception as e:
print(e)
list_dbs()
Then an error "This result object does not return rows. It has been closed automatically."
But then I remove "use master;" and it works:
Because I have many databases, I have to use "use databasename." Any ideas?



master) inodbc_connect, why do you needUSE master;in your SQL anyway? TheUSEis redundant, as you've already connected to the correct database.masterdatabase. Are you asking how to list the tables in each database rather than the databases on the server?