Nie mogłem znaleźć żadnych informacji na ten temat w dokumentacji, ale jak mogę uzyskać listę tabel utworzonych w SQLAlchemy?SQL Alchemy - Jak uzyskać listę tabel
Użyłem metody klasy do utworzenia tabel.
Nie mogłem znaleźć żadnych informacji na ten temat w dokumentacji, ale jak mogę uzyskać listę tabel utworzonych w SQLAlchemy?SQL Alchemy - Jak uzyskać listę tabel
Użyłem metody klasy do utworzenia tabel.
Wszystkie tabele są gromadzone w atrybucie sqlalchemy MetaData w atrybucie tables
. aby tylko uzyskać listę nazw tych tabelach:
>>> metadata.tables.keys()
['posts', 'comments', 'users']
Jeśli używasz rozszerzenia deklaratywny, to prawdopodobnie nie są zarządzający metadane samodzielnie. Na szczęście, metadane jest wciąż obecna na klasy bazowej,
>>> Base = sqlalchemy.ext.declarative.declarative_base()
>>> Base.metadata
MetaData(None)
Jeśli chcesz dowiedzieć się, jakie są obecne tabele w bazie danych, nawet wśród tych, nie masz nawet powiedział SQLAlchemy o jeszcze, a potem można użyj refleksji tabeli. sqlalchemy następnie sprawdzi bazę danych i zaktualizuje metadane do wszystkich brakujących tabel.
>>> metadata.reflect(engine)
Obiekt metadanych, w którym zostały utworzone tabele, ma to w słowniku.
metadata.tables.keys()
Istnieje metoda w obiekcie engine
, aby pobrać listę nazw tabel. engine.table_names()
ja dostać 'Traceback (most recent call last): File "dedup_jobs.py ", linia 31, w
Szukałem czegoś takiego:
from sqlalchemy import create_engine
eng = create_engine('mysql+pymysql://root:[email protected]:3306', pool_recycle=3600)
q = eng.execute('SHOW TABLES')
available_tables = q.fetchall()
Robi execute i zwraca wszystkie tabele.
zmiana:
Postgres:
eng = create_engine('postgresql+psycopg2://root:[email protected]/
q = eng.execute('SELECT * FROM pg_catalog.pg_tables')
To nie jest platforma. Będzie działać tylko z mysql, nie będzie działać z innymi silnikami baz danych. –
@EdwardBetts masz rację, na czym polegał silnik db? – jmunsch
Zastanawiając wszystkich tabel na raz umożliwia pobieranie nazwy tabel ukryte też. I stworzył kilka tabel tymczasowych i pokazali się z
meta = MetaData()
meta.reflect(bind=myengine)
for table in reversed(meta.sorted_tables):
print table
Reference http://docs.sqlalchemy.org/en/latest/core/reflection.html
from sqlalchemy import create_engine
engine = create_engine('postgresql://use:[email protected]/DBname')
print (engine.table_names())
jestem rozwiązywania tego samego problemu i znaleźć ten post. Po pewnym okresie try, sugerowałbym użycie poniżej listę wszystkich tabel: (wspomniane przez zerocog)
metadata = MetaData()
metadata.reflect(bind=engine)
for table in metadata.sorted_tables:
print(table)
ta jest przydatna do bezpośredniego przenoszenia stołu i czuję jest zalecane.
I skorzystać z poniższego kodu, aby uzyskać nazwy tabel:
for table_name in engine.table_names():
print(table_name)
„metadata.tables” zapewnia Dict dla nazwy tabeli i obiektu tabeli. który byłby również przydatny do szybkiego wyszukiwania.
Przestarzałe od wersji 0.8: Proszę użyć metody sqlalchemy.schema.MetaData.reflect(). Zauważ, użyj 'engine = sqlalchemy.create_engine ('mysql: // user: password @ host/db_name')' zamiast '" mysql: // user: password @ host "' i 'engine.execute (" użyj db_name ")'. –
@XuJiawan: Nie jestem pewien, która rzecz jest przestarzała, nie jestem pewien, która metoda sugeruje, czy to nie jest 'sqlalchemy.MetaData.reflect()'? – SingleNegationElimination
@IfLoop: Znalazłem go z [dokumentu sqlalchemy] (http://docs.sqlalchemy.org/en/rel_0_9/core/metadata.html#sqlalchemy.schema.MetaData.params.reflect). –