Vel*_*iko 11 python metadata sqlalchemy
我试图理解MetaData()创建的对象本质上是什么.在Python中反映和创建数据库时使用它(使用SQLAlchemy包).
请考虑以下工作代码:
/使用预加载的引擎(sqlite:///chapter5.sqlite)和metadata = MetaData():当我在控制台中调用元数据时,它返回'MetaData(bind = None)'/
# Import Table, Column, String, and Integer
from sqlalchemy import Table, Column, String, Integer
# Build a census table: census
census = Table('census', metadata,
Column('state', String(30)),
Column('sex', String(1)),
Column('age', Integer()),
Column('pop2000', Integer()),
Column('pop2008',Integer()))
# Create the table in the database
metadata.create_all(engine)
Run Code Online (Sandbox Code Playgroud)
当然,通过输入类型(元数据),我得到的对象元数据的类型是:sqlalchemy.sql.schema.MetaData.在SQLAlchemy文档中,它是编写的
MetaData是一个容器对象,它将所描述的数据库(或多个数据库)的许多不同功能保持在一起.
但是,我很困惑,因为在代码中我们只创建一个"指向"元数据的表.之后,当我们在元数据上调用create_all方法(到目前为止为空)时,指向数据库(由引擎指向).
可能我的问题很愚蠢,但是:
python如何完全连接这些实例?可能是人口普查表的声明以双向方式将元数据链接到列名.
注意:代码来自datacamp课程的练习.
我想您问过python(您大概是说SQLAlchemy)如何将表连接到元数据以及将元数据连接到数据库和引擎。
因此,SQLAlchemy中的数据库表属于(链接到)元数据对象。该表将自身添加到元数据;元数据对象上有一个表属性,其行为非常类似于列表:
rue,nullable = False),Column('host_id',Integer(),ForeignKey('slots.id'),table =,nullable = False),Column('active',Boolean(),table =),Col umn ('port',Integer(),table =,nullable = False),Column('description',String(length = 120),table =),Column('username',String(length = 40),tab le = ),Column('password',String(length = 40),table =),schema = None),'network_location_associations':Table('network_location_associations',M etaData(bind = None),Column('network_id',Integer( ),ForeignKey('networks.id'),table =),Column('location_id',Integer(),ForeignKey('locations.id'),table =),schema = None),'machines':Table('机器”,MetaData(bind = None),Column('id',Integer(),ForeignKey('items.id'),table =
,primary_key = True,nullable = False),Column('eth0',String(),table =),Column('eth1',String(),table =),Column('eth2',String(),table = ),Colu mn('eth3',String(),table =),Column('wlan0',String(),table =),Column('ipmi',String(),table =),schema = None), 'machine_profiles':表('mach ine_profiles',MetaData(bind = None),Column('id',Integer(),table =,primary_key = True,nullable = False),Column('DisplayPort',Integer(), table =),Column('HDMI',Integer(),table =),Column('RAM',String(length = 10),table =),schema = None),'geometry':Table('geometry', MetaData(b ind = None),Column('slot_id',Integer(),ForeignKey('slots.id'),table =,primary_key = True,nullable = False),Column('room_id',Integer(),ForeignKey ('rooms.id'),表格e =,nullable = False),Column('x_mm',Float(),table =,nullable = False),Column('y_mm',Float(),table =,nullable = False) ,Column('z_mm',Float(),table =,nullable = False),Column('rotation_deg',Float(),table =,nullable = False),Column('tilt_deg',Float(),table = ,nullable = False),Column('ro ll_deg',Float(),table =,nullable = False),Column('on_floor',Boolean(),table =,nullable = False),schema = None),'publicaddresses ':Table('publicaddresses',MetaData(bind = None),Column('id',Integer(),table =,primary_key = True,nullable = False),Column('ip',Integer(),table =, nullable = False),C olumn('slot_id',Integer(),ForeignKey('slots.id'),table =,nullable = False),schema = None),'connections':Table('connections',MetaData(bind = None),Column('i d',Integer(),table =,primary_key = True,nullable = False),Column('src_slot_id',Integer(),ForeignKey('slots.id' ),table =),Column('src_index',Inte ger(),table =),Column('src_type',Enum('HDMI','DisplayPort','miniDP','VGA','DVI',' Power','CAT6','WallNet','Hybrid','UnknownVideo'),table =),Column('dst_slot_id',Integer(),ForeignKey('slots.id'),table =),Column(' dst_index',Integer(),table =),Column('dst_type',Enum('HDMI','Displa yPort','miniDP','VGA','DVI','Power','CAT6','WallNet ','Hybrid','UnknownVideo'),table =),schema = None),'types':Table('types',MetaData(bind = None),Column('type',Integer(),table =,primary_key = True,nullable = False),Column('name',String(length = 60) ,table =),schema = None),'roles':Table('roles',MetaData(bind = No ne),Column('id',Integer(),table =,primary_key = True,nullable = False), Column('name',String(),table =,nullable = False),Column('description',String(),table =,nullable = False),Column('display_driver',Boolean(),table =,nullable = False),schema = None),'rooms':Table('rooms',MetaData(bind = None),Column('id',Integer(),table =,primary_key = True,nullable = False),Column( 'location_id',Integer(),ForeignKey('locations.id'),table =,nullable = False),Column('parent_id',Integer(),table =),Column('名称',字符串(length = 50),表=),列('x_mm',Float(),表=,可空= False),列('y_mm',Float(),表=,可空=其他) ,Column('z_mm',Float(),table =,nullable = False),Column('rotation_deg',Float(),table =,nullable = False),Column('width_mm',Float(),table =, nullable = False),Column('height_mm',Float(),table =,nullable = False),Column('depth_mm',Float(),table =,nullable = False),Column('has_workstations',Boolean( ),ta ble =,nullable = False),schema = None),'displays':Table('displays',MetaData(bind = None),Column('id',Integer(),table =,primary_key = True, nullable = False),列('hostname',字符串(length = 100),表=),列('formation',枚举('2x3','1x2','corkboard','desktop','desktop-shared'),table =,nullable = False),s chema = None),'slots':Table('slots',MetaData(bind = None),Column('id',Integer(),table = ,primary_key = True,nullable = False),Column('location_id',Integer(),ForeignKe y('locations.id'),table =,nullable = False),Column('hostname',String(),table = ),Column('item_id',Integer(),ForeignKey('items.id'),table =),Column('r ole_id',Integer(),ForeignKey('roles.id'),table =),Column ('parent_id',Integer(),ForeignKey('slots.id'),table =),Column('ip',Integer(),table =),Col umn('ip_ipmi',Integer(),table =) ,Column('ip_wlan',Integer(),table =),Column('optional',Boolean(),table =),Column('notes',String(),table =),Column('classification',枚举('U','S','TS'),table =),Column('os',String(),table =),Column('release',String(),table =),Column(' track',String(),table =),Column('uuid',Binary(),table =),Column('displaydata',String(),table =),schema = None)})
len()models.Base.metadata.tables文件“”,第1行len()models.Base.metadata.tables ^ SyntaxError:语法无效len(models.Base.metadata.tables)22
您需要元数据对象的原因是:
具有用于创建和删除相关表的单个工作单元
有一个地方可以收集反射操作的所有结果
根据相关性表对相关性表进行排序,以便可以按正确的顺序创建外键约束。
因此,元数据对象包含SQLAlchemy'sidea,它认为数据库看起来像。通常是通过反射或创建表对象(可能是通过声明性基本扩展)填充的。
您可以通过在元数据构造函数中设置bind参数直接将元数据对象与真实的数据库引擎关联。或者,可以在创建调用或反射调用中使用元数据时建立链接。
| 归档时间: |
|
| 查看次数: |
3653 次 |
| 最近记录: |