python链接mysql系统结构设计_MySQL Schema设计(三)利用Python操作Schema

虽然SQL有国际标准,但遗憾的是,各个数据库厂商对这些标准的解读都不一样,并且都在标准的基础上实现了各自的私有语法。为了隐藏不同SQL“方言”之间到区别,人们开发了诸如SQLAlchemy之类的工具

SQLAlchemy连接模块:

SQLAlchemy连接模块:

[root@DataHacker Desktop]# cat sa.py

import sqlalchemy as sa

engine = sa.create_engine(\'mysql://root:oracle@127.0.0.1/testdb\',pool_recycle=3600)

metadata = sa.MetaData()

example 1:表定义

In [3]: t = Table(\'t\',metadata,

...: Column(\'id\',Integer),

...: Column(\'name\',VARCHAR(20)),

...: mysql_engine=\'InnoDB\',

...: mysql_charset=\'utf8\'

...: )

In [4]: t.create(bind=engine)

example 2:表删除

有2种方式,其一:

In [5]: t.drop(bind=engine,checkfirst=True)

另一种是:

In [5]: metadata.drop_all(bind=engine,checkfirst=True),其中可以借助tables属性指定要删除的对象

example 3: 5种约束

3 .1 primary key

下面2种方式都可以,一个是列级,一个是表级

In [7]: t_pk_col = Table(\'t_pk_col\',metadata,Column(\'id\',Integer,primary_key=True),Column(\'name\',VARCHAR(20)))

In [8]: t_pk_col.create(bind=engine)

In [9]: t_pk_tb = Table(\'t_pk_01\',metadata,Column(\'id\',Integer),Column(\'name\',VARCHAR(20)),PrimaryKeyConstraint(\'id\',\'name\',name=\'prikey\'))

In [10]: t_pk_tb.create(bind=engine)

3.2 Foreign Key

In [13]: t_fk = Table(\'t_fk\',metadata,Column(\'id\',Integer,ForeignKey(\'t_pk.id\')))

In [14]: t_fk.create(bind=engine)

In [15]: t_fk_tb = Table(\'t_fk_tb\',metadata,Column(\'col1\',Integer),Column(\'col2\',VARCHAR(10)),ForeignKeyConstraint([\'col1\',\'col2\'],[\'t_pk.id\',\'t_pk.name\']))

In [16]: t_fk_tb.create(bind=engine)

3.3 unique

In [17]: t_uni = Table(\'t_uni\',metadata,Column(\'id\',Integer,unique=True))

In [18]: t_uni.create(bind=engine)

In [19]: t_uni_tb = Table(\'t_uni_tb\',metadata,Column(\'col1\',Integer),Column(\'col2\',VARCHAR(10)),UniqueConstraint(\'col1\',\'col2\'))

In [20]: t_uni_tb.create(bind=engine)

3.4 check

虽然能成功,但MySQL目前尚未支持check约束。这里就不举例了。

3.5 not null

In [21]: t_null = Table(\'t_null\',metadata,Column(\'id\',Integer,nullable=False))

In [22]: t_null.create(bind=engine)

4 默认值

分2类:悲观(值由DB Server提供)和乐观(值由SQLAlshemy提供),其中乐观又可分:insert和update

4.1 例子:insert

In [23]: t_def_inser = Table(\'t_def_inser\',metadata,Column(\'id\',Integer),Column(\'name\',VARCHAR(10),server_default=\'cc\'))

In [24]: t_def_inser.create(bind=engine)

3.2 例子:update

In [25]: t_def_upda = Table(\'t_def_upda\',metadata,Column(\'id\',Integer),Column(\'name\',VARCHAR(10),server_onupdate=\'DataHacker\'))

In [26]: t_def_upda.create(bind=engine)

3.3 例子:Passive

In [27]: t_def_pass = Table(\'t_def_pass\',metadata,Column(\'id\',Integer),Column(\'name\',VARCHAR(10),DefaultClause(\'cc\')))

In [28]: t_def_pass.create(bind=engine)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值