<b><font size=3 color="green">使用sqlalchemy獲取到的結果只包含數據,不包含字段,那麼咱們如何獲取到對應字段和其屬性呢?以及如何獲取某張表的主鍵呢?</font></b>python
# -*- coding:utf-8 -*- # @Author: WanMingZhu # @Date: 2019/10/9 10:38 from sqlalchemy.ext.automap import automap_base from sqlalchemy.orm import sessionmaker from sqlalchemy import MetaData, inspect, create_engine engine = create_engine("postgresql://postgres:zgghyys123@localhost:5432/postgres") session = sessionmaker(bind=engine)() # 將數據庫的表反射出來 metadata = MetaData(bind=engine) metadata.reflect(bind=engine, schema="anime", only=["overwatch"]) Base = automap_base(metadata=metadata) Base.prepare() # ow就是overwatch表對應的類 ow = getattr(Base.classes, "overwatch") # 獲取主鍵 primary_key = inspect(ow).primary_key print(primary_key) # (Column('id', INTEGER(), table=<overwatch>, primary_key=True, nullable=False),) # 因爲會有多個主鍵,因此是一個序列。這裏咱們只有一個主鍵,因此取第一個,而後拿到名字 print(primary_key[0].name) # id # 那麼如何拿到表的全部字段名呢? print(inspect(ow).c.keys()) # ['id', 'name', 'age', 'hp', 'attack', 'role', 'ultimate', 'country'] # 那如何拿到字段的類型呢? columns = inspect(ow).columns print(list(columns)) """ [Column('id', INTEGER(), table=<overwatch>, primary_key=True, nullable=False), Column('name', VARCHAR(length=255), table=<overwatch>, nullable=False), Column('age', INTEGER(), table=<overwatch>), Column('hp', INTEGER(), table=<overwatch>), Column('attack', VARCHAR(length=255), table=<overwatch>), Column('role', VARCHAR(length=255), table=<overwatch>), Column('ultimate', VARCHAR(length=255), table=<overwatch>), Column('country', VARCHAR(), table=<overwatch>)] """ # 以上即是每個字段的屬性組成的列表,每個元素都是<class 'sqlalchemy.sql.schema.Column'>類型 # 那麼咱們即可以拿到相應的屬性 for col_attr in columns: print(f"字段名:{col_attr.name}," f"是否爲主鍵:{col_attr.primary_key}," f"字段類型:{str(col_attr.type)}," f"是否容許非空:{col_attr.nullable}", f"註釋:{col_attr.comment}") """ 字段名:id,是否爲主鍵:True,字段類型:INTEGER,是否容許非空:False 註釋:英雄的id 字段名:name,是否爲主鍵:False,字段類型:VARCHAR(50),是否容許非空:False 註釋:英雄的姓名 字段名:age,是否爲主鍵:False,字段類型:INTEGER,是否容許非空:True 註釋:英雄的年齡 字段名:hp,是否爲主鍵:False,字段類型:INTEGER,是否容許非空:True 註釋:英雄的血量 字段名:attack,是否爲主鍵:False,字段類型:VARCHAR(255),是否容許非空:True 註釋:攻擊類型 字段名:role,是否爲主鍵:False,字段類型:VARCHAR(255),是否容許非空:True 註釋:英雄定位 字段名:ultimate,是否爲主鍵:False,字段類型:VARCHAR(255),是否容許非空:True 註釋:終極技能 字段名:country,是否爲主鍵:False,字段類型:TEXT,是否容許非空:True 註釋:英雄的國籍 """