Nie mogłem znaleźć żadnych informacji na ten temat w dokumentacji, ale jak mogę uzyskać listę tabel utworzonych w SQLAlchemy?
Do tworzenia tabel użyłem metody class.
źródło
Nie mogłem znaleźć żadnych informacji na ten temat w dokumentacji, ale jak mogę uzyskać listę tabel utworzonych w SQLAlchemy?
Do tworzenia tabel użyłem metody class.
Wszystkie tabele są gromadzone w tables
atrybucie obiektu SQLAlchemy MetaData. Aby uzyskać listę nazw tych tabel:
>>> metadata.tables.keys()
['posts', 'comments', 'users']
Jeśli używasz deklaratywnego rozszerzenia, prawdopodobnie nie zarządzasz samodzielnie metadanymi. Na szczęście metadane są nadal obecne w klasie bazowej,
>>> Base = sqlalchemy.ext.declarative.declarative_base()
>>> Base.metadata
MetaData(None)
Jeśli próbujesz dowiedzieć się, jakie tabele są obecne w Twojej bazie danych, nawet te, o których jeszcze nie powiedziałeś SQLAlchemy, możesz użyć odbicia tabel. SQLAlchemy następnie sprawdzi bazę danych i zaktualizuje metadane o wszystkie brakujące tabele.
>>> metadata.reflect(engine)
W przypadku Postgres, jeśli masz wiele schematów, musisz przejść przez wszystkie schematy w silniku:
from sqlalchemy import inspect
inspector = inspect(engine)
schemas = inspector.get_schema_names()
for schema in schemas:
print("schema: %s" % schema)
for table_name in inspector.get_table_names(schema=schema):
for column in inspector.get_columns(table_name, schema=schema):
print("Column: %s" % column)
engine = sqlalchemy.create_engine('mysql://user:password@host/db_name')
zamiast"mysql://user:password@host"
iengine.execute("use db_name")
.sqlalchemy.MetaData.reflect()
?reflect
argument doMetaData.__init__
, flaga boolowska, jest przestarzały na rzecz używaniaMetaData.reflect()
, dokładnie tak, jak pokazałem w mojej odpowiedzi.MetaData.reflect()
metody w ten sposób. A także skomentuj to dla kogoś, kto może mieć ten sam problem spowodowany deklaracją silnika.W
engine
obiekcie znajduje się metoda pobierania listy nazw tabel.engine.table_names()
źródło
Traceback (most recent call last): File "dedup_jobs.py", line 31, in <module> print(engine.table_names()) File "/Users/darshanchoudhary/.virtualenvs/services/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 2128, in table_names return self.dialect.get_table_names(conn, schema) value = value.replace(self.escape_quote, self.escape_to_quote) AttributeError: 'NoneType' object has no attribute 'replace'
(obcięty stos)DB.engine.table_names()
Lub jakąkolwiek nazwę zmiennej bazy danych.from sqlalchemy import create_engine engine = create_engine('postgresql://use:pass@localhost/DBname') print (engine.table_names())
źródło
engine.table_names()
W interpreterze Pythona użyj db.engine.table_names ()
$ python >>> from myapp import db >>> db.engine.table_names()
źródło
Szukałem czegoś takiego:
from sqlalchemy import create_engine eng = create_engine('mysql+pymysql://root:password@localhost:3306', pool_recycle=3600) q = eng.execute('SHOW TABLES') available_tables = q.fetchall()
Wykonuje polecenie i zwraca wszystkie tabele.
aktualizacja:
Postgres:
eng = create_engine('postgresql+psycopg2://root:password@localhost/ q = eng.execute('SELECT * FROM pg_catalog.pg_tables')
źródło
Obiekt metadanych, za pomocą którego utworzyłeś tabele, ma to w słowniku.
metadata.tables.keys()
źródło
Rozwiązuję ten sam problem i znalazłem ten post. Po kilku próbach uruchomienia sugerowałbym użycie poniżej, aby wyświetlić wszystkie tabele: (wspomniane przez zerocog)
metadata = MetaData() metadata.reflect(bind=engine) for table in metadata.sorted_tables: print(table)
Jest to przydatne do bezpośredniej obsługi stołu i uważam, że jest zalecane.
I użyj poniższego kodu, aby uzyskać nazwy tabel:
for table_name in engine.table_names(): print(table_name)
„metadata.tables” zawiera Dict dla nazwy tabeli i obiektu Table. co byłoby również przydatne w przypadku szybkiego zapytania.
źródło
reflect
,metadata.sorted_tables
nie zadziałaOdzwierciedlenie wszystkich tabel naraz pozwala również odzyskać ukryte nazwy tabel. Stworzyłem tymczasowe tabele i pojawiły się z
meta = MetaData() meta.reflect(bind=myengine) for table in reversed(meta.sorted_tables): print table
Źródła http://docs.sqlalchemy.org/en/latest/core/reflection.html
źródło
Po prostu takie proste:
Aby sprawdzić, czy tabela istnieje:
źródło