SQL Chemy - 테이블 목록 가져오기
문서에서는 이에 대한 정보를 찾을 수 없었습니다만, SQL Chemy에서 작성된 테이블 목록은 어떻게 얻을 수 있습니까?
클래스 메서드를 사용하여 테이블을 만들었습니다.
모든 테이블은 에 수집됩니다.tables
SQLAlchemy MetaData 객체의 속성.이러한 테이블의 이름 목록을 가져오려면 다음 절차를 수행합니다.
>>> metadata.tables.keys()
['posts', 'comments', 'users']
선언 확장자를 사용하는 경우 메타데이터를 직접 관리하지 않을 수 있습니다.다행히 메타데이터는 아직 base class에 존재합니다.
>>> Base = sqlalchemy.ext.declarative.declarative_base()
>>> Base.metadata
MetaData(None)
SQL Chemy에 아직 알리지 않은 테이블이라도 데이터베이스에 어떤 테이블이 있는지 알아내려면 테이블 리플렉션을 사용할 수 있습니다.SQL Chemy는 데이터베이스를 검사하고 누락된 모든 테이블로 메타데이터를 업데이트합니다.
>>> metadata.reflect(engine)
Postgres의 경우 스키마가 여러 개 있는 경우 엔진의 모든 스키마를 루프해야 합니다.
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
object를 지정하면 테이블 이름 목록을 가져올 수 있습니다. engine.table_names()
from sqlalchemy import create_engine
engine = create_engine('postgresql://use:pass@localhost/DBname')
print (engine.table_names())
- DB에 있는 모든 기존 테이블 목록을 가져오려면:
SQL Chemy 1.4 현재 : https://docs.sqlalchemy.org/en/14/core/reflection.html#fine-grained-reflection-with-inspector
from sqlalchemy import create_engine
from sqlalchemy import inspect
engine = create_engine('...')
insp = inspect(engine)
print(insp.get_table_names())
오래된 방식(engine.table_names()
)의 수율:
SADeprecationWarning: The from_engine() method on Inspector is deprecated and will be removed in a future release. Please use the sqlalchemy.inspect() function on an Engine or Connection in order to acquire an Inspector. (deprecated since: 1.4)
- 선언된 테이블 목록을 가져오려면 수락된 답변을 사용합니다.
metadata.tables.keys()
python 인터프리터 내에서 db.engine.table_names()를 사용합니다.
$ python
>>> from myapp import db
>>> db.engine.table_names()
난 이런 걸 찾고 있었어
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()
실행되어 모든 테이블을 반환합니다.
업데이트:
포스트그레스:
eng = create_engine('postgresql+psycopg2://root:password@localhost/
q = eng.execute('SELECT * FROM pg_catalog.pg_tables')
심플한 것은 다음과 같습니다.
engine.table_names()
또한 테이블이 존재하는지 테스트하려면 다음 절차를 수행합니다.
engine.has_table(table_name)
테이블을 작성한 메타데이터 오브젝트에는 사전에 이 정보가 포함되어 있습니다.
metadata.tables.keys()
저도 같은 문제를 풀고 있는데 이 글을 찾았어요.몇 번 실행한 후 아래를 사용하여 모든 테이블을 나열할 것을 권장합니다. (zerocog에서 언급)
metadata = MetaData()
metadata.reflect(bind=engine)
for table in metadata.sorted_tables:
print(table)
이것은 테이블을 직접 다룰 때 유용하고 추천할 만합니다.
다음 코드를 사용하여 테이블 이름을 가져옵니다.
for table_name in engine.table_names():
print(table_name)
"metadata.tables"는 테이블 이름과 테이블 객체에 대한 딕트를 제공합니다.빠른 질의에도 유용할 것입니다.
2021-10-22 현재 사용하고 있는 것은 다음과 같습니다.
import sqlalchemy as sql
engine = sql.create_engine("connection_string")
sql.inspect(engine).get_table_names()
모든 테이블을 한 번에 리플렉트하면 숨겨진 테이블 이름도 검색할 수 있습니다.임시 테이블을 몇 개 만들었는데
meta = MetaData()
meta.reflect(bind=myengine)
for table in reversed(meta.sorted_tables):
print table
레퍼런스 http://docs.sqlalchemy.org/en/latest/core/reflection.html
은 '우리'를 사용하는 입니다.inspect
:
- 인스펙터를 생성하여 엔진에 연결합니다.
- 데이터베이스 내의 테이블 이름 수집
- 테이블 열 이름 수집
from sqlalchemy import create_engine, inspect
engine = create_engine("sqlite:///../Resources/dow.sqlite")
conn = engine.connect()
inspector = inspect(conn)
inspector.get_table_names() #returns "dow"
columns = inspector.get_columns('dow')
for column in columns:
print(column["name"], column["type"])
Flask-SQ를 사용하는 경우LAlchemy, DB 인스턴스에서 가져올 수 있습니다.
[...]
db = SQLAlchemy(app)
db.engine.table_names() # you'll get a list of all the table names in your database
모든 열 정보를 표시하는 전체 예제입니다.인 것으로 가정합니다.df
에는 SQL 데이터베이스에 쓰는 데이터 프레임이 포함되어 있습니다.
from sqlalchemy import create_engine, inspect
from sqlalchemy_utils.functions import database_exists, create_database
engine = create_engine('sqlite:///mydb.sqlite', echo=True)
if not database_exists(engine.url):
create_database(engine.url)
else:
engine.connect()
df.to_sql('MyTable', con=engine, if_exists='replace', index=False) # index=False avoids auto-creation of level_0 (name tiebreaker)
inspector = inspect(engine)
table_names = inspector.get_table_names()
for table_name in table_names:
print(f"Table:{table_name}")
column_items = inspector.get_columns(table_name)
print('\t'.join(n for n in column_items[0]))
for c in column_items:
assert len(c) == len(column_items[0])
print('\t'.join(str(c[n]) for n in c))
저는 개인적으로 이렇게 하면 효과가 있습니다.
from sqlalchemy import inspect
inspector = inspect(engine)
inspector.get_table_names()
내 DB에 있는 모든 이름을 알려줘요
언급URL : https://stackoverflow.com/questions/6473925/sqlalchemy-getting-a-list-of-tables
'programing' 카테고리의 다른 글
MARIADB - QUERY 패킷 전송 중 오류 발생(max_allowed_packet 아님) (0) | 2022.11.01 |
---|---|
ORM 매핑의 '소유측'이란 무엇입니까? (0) | 2022.11.01 |
ReactJS - "setState"가 호출될 때마다 렌더가 호출됩니까? (0) | 2022.11.01 |
로드 시 Larabel/Allustive 모델에 사용자 지정 속성을 추가하시겠습니까? (0) | 2022.11.01 |
리스트에 쇼트 포함 기능이 있나요? (0) | 2022.11.01 |