Heim > Datenbank > MySQL-Tutorial > MySQLSchema设计(三)利用Python操作Schema_MySQL

MySQLSchema设计(三)利用Python操作Schema_MySQL

PHP中文网
Freigeben: 2016-05-27 14:12:26
Original
1150 Leute haben es durchsucht

pythonbitsCN.com

弓在箭要射出之前,低声对箭说道,“你的自由是我的”。Schema如箭,弓似Python,选择Python,是Schema最大的自由。而自由应是一个能使自己变得更好的机会。

㈠ MySQLdb部分
 

mysql> use sakila; mysql> desc actor; 
+-------------+----------------------+------+-----+-------------------+-----------------------------+ 
| Field | Type | Null | Key | Default | Extra | 
+-------------+----------------------+------+-----+-------------------+-----------------------------+ 
| actor_id | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | first_name | 
varchar(45) | NO | | NULL 
| | | last_name | varchar(45) | NO | MUL | NULL | | | last_update | timestamp | NO | 
| CURRENT_TIMESTAMP | on 
update CURRENT_TIMESTAMP 
| +-------------+----------------------+------+-----+-------------------+-----------------------------+ 
4 rows in set (0.00 sec)
[root@DataHacker ~]# cat dbapi.py #!/usr/bin/env ipython #coding = utf-8 #Author: linwaterbin@gmail.com 
#Time: 2014-1-29 import MySQLdb as dbapi USER = 'root' PASSWD = 'oracle' HOST = '127.0.0.1' 
DB = 'sakila' 
conn = dbapi.connect(user=USER,passwd=PASSWD,host=HOST,db=DB)
[root@DataHacker ~]# cat QueryColumnMetaData.py #!/usr/bin/env ipython from dbapi import * 
cur = conn.cursor() statement = """select * from actor limit 1""" 
cur.execute(statement) print "output column metadata....." 
print for record in cur.description: print record cur.close() conn.close()
Nach dem Login kopieren

1.)调用execute()之后,cursor应当设置其description属性

2.)是个tuple,共7列:列名、类型、显示大小、内部大小、精度、范围以及一个是否接受null值的标记

[root@DataHacker ~]
# chmod +x QueryColumnMetaData.py[root@DataHacker ~]
# ./QueryColumnMetaData.pyoutput column metadata.....
('actor_id', 2, 1, 5, 5, 0, 0)('first_name', 253, 8, 45, 45, 0, 0)
('last_name', 253, 7, 45, 45, 0, 0)('last_update', 7, 19, 19, 19, 0, 0)
In [1]: from dbapi import * In [2]: cur = conn.cursor() 
In [3]: v_sql = "select actor_id,last_name from actor limit 2" 
In [4]: cur.execute(v_sql) Out[4]: 2L In [5]: results = cur.fetchone() 
In [6]: print results[0] 58 In [7]: print results[1] AKROYD
In [2]: import MySQLdb.cursors 
In [3]: import MySQLdb 
In [4]: conn = MySQLdb.connect(user='root',passwd='oracle',host='127.0.0.1',db='sakila',
cursorclass=MySQLdb.cursors.DictCursor) 
In [5]: cur = conn.cursor() 
In [6]: v_sql = "select actor_id,last_name from actor limit 2" 
In [7]: cur.execute(v_sql) Out[7]: 2L 
In [8]: results = cur.fetchone() 
In [9]: print results['actor_id'] 58 
In [10]: print results['last_name'] AKROYD
Nach dem Login kopieren

㈡ SQLAlchemy--SQL炼金术师

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()
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)
Nach dem Login kopieren

有2种方式,其一: In [5]: t.drop(bind=engine,checkfirst=True) 另一种是: In [5]: metadata.drop_all(bind=engine,checkfirst=True),其中可以借助tables属性指定要删除的对象

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)
Nach dem Login kopieren

4 默认值

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

4.1 例子:

insertIn [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)
Nach dem Login kopieren

3.2 例子:

updateIn [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)
Nach dem Login kopieren

3.3 例子:

PassiveIn [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)
Nach dem Login kopieren

㈢ 隐藏Schema

版本: [root@DataHacker ~]# ./sesc.py --version 1.0 查看帮助: [root@DataHacker ~]# ./sesc.py -h Usage: sesc.py [options]

#!/usr/bin/env python import optparse from dbapi import * #构造OptionParser实例,配置期望的选项 parser = optparse.OptionParser(usage="%prog [options]

以上就是MySQLSchema设计(三)利用Python操作Schema_MySQL的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage