MySQL Schema设计(三)利用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-29import MySQLdb as dbapiUSER = \'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 ipythonfrom 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 recordcur.close()
conn.close()
1.)调用execute()之后,cursor应当设置其description属性
[root@DataHacker ~]# chmod +x QueryColumnMetaData.py
[root@DataHacker ~]# ./QueryColumnMetaData.py
output 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]: 2LIn [5]: results = cur.fetchone()In [6]: print results[0]
58In [7]: print results[1]
AKROYD
In [2]: import MySQLdb.cursorsIn [3]: import MySQLdbIn [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]: 2LIn [8]: results = cur.fetchone()In [9]: print results[\'actor_id\']
58In [10]: print results[\'last_name\']
AKROYD
㈡ 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)
有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)
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)
㈢ 隐藏Schema
版本:
[root@DataHacker ~]# ./sesc.py --version
1.0查看帮助:
[root@DataHacker ~]# ./sesc.py -h
Usage: sesc.py [options] <arg1> <arg2> [<arg3>...]Options:--version show program\'s version number and exit-h, --help show this help message and exit-q TERM assign where predicate-c COL, --column=COL assign query column-t TABLE assign query table-f, --format -f must match up -o-o OUTFILE assign output file我们要的效果:
[root@DataHacker ~]# ./sesc.py -t actor -c last_name -q s% -f -o output.txt
[root@DataHacker ~]# cat output.txt
************ 1 row *******************actor_id: 180
first_name: JEFF
last_name: SILVERSTONE
last_update: 2006-02-15 04:34:33************ 2 row *******************actor_id: 195
first_name: JAYNE
last_name: SILVERSTONE
last_update: 2006-02-15 04:34:33
......<此处省略大部分输出>......
#!/usr/bin/env python
import optparse
from dbapi import *#构造OptionParser实例,配置期望的选项
parser = optparse.OptionParser(usage="%prog [options] <arg1> <arg2> [<arg3>...]",version=\'1.0\',)
#定义命令行选项,用add_option一次增加一个
parser.add_option("-q",action="store",type="string",dest="term",help="assign where predicate")
parser.add_option("-c","--column",action="store",type="string",dest="col",help="assign query column")
parser.add_option("-t",action="store",type="string",dest="table",help="assign query table")
parser.add_option("-f","--format",action="store_true",dest="format",help="-f must match up -o")
parser.add_option("-o",action="store",type="string",dest="outfile",help="assign output file")
#解析命令行
options,args = parser.parse_args()#把上述dest值赋给我们自定义的变量
table = options.table
column = options.col
term = options.term
format = options.format#实现动态读查询
statement = "select * from %s where %s like \'%s\'"%(table,column,term)
cur = conn.cursor()
cur.execute(statement)
results = cur.fetchall()#模拟 \G 输出形式
if format is True:columns_query = "describe %s"%(table)cur.execute(columns_query)heards = cur.fetchall()column_list = []for record in heards:column_list.append(record[0])output = ""count = 1for record in results:output = output + "************ %s row ************\n\n"%(count)for field_no in xrange(0, len(column_list)):output = output + column_list[field_no]+ ": " + str(record[field_no]) + "\n"output = output + "\n"count = count + 1
else:output = []for record in xrange(0,len(results)):output.append(results[record])output = \'\'.join(output)#把输出结果定向到指定文件
if options.outfile:outfile = options.outfilewith open(outfile,\'w\') as out:out.write(output)
else:print output#关闭游标与连接
conn.close()
cur.close()
转载于:https://www.cnblogs.com/stevenzeng/p/5154963.html
MySQL Schema设计(三)利用Python操作Schema相关推荐
- 操作 mysql 不生成日志_利用Python操作MySQL数据库,以后不懂这些是要被鄙视的!...
前言 在工作中,我们需要经常对数据库进行操作,比如 Oracle.MySQL.SQL Sever 等,今天我们就学习如何利用Python来操作 MySQL 数据库. 本人环境:Python 3.7.0 ...
- python如何收集数据库_利用Python操作mysql数据库
本文主要讲解如何利用python中的pymysql库来对mysql数据库进行操作 大家在转行项目中也可以加入这一步操作,提高逼格的同时还能简化流程 正文开始: 先看一下最常见的操作:从数据库中sele ...
- mysql数据导入python_利用python将mysql中的数据导入excel
原博文 2017-06-29 13:29 − Python对Excel的读写主要有xlrd.xlwt.xlutils.openpyxl.xlsxwriter几种. 如下分别利用xlwt和openpyx ...
- 利用python操作word文档
总目录:Python数据分析整理 本文代码参考自官方文档: python-docx 使用的库下载方式为:pip install python-docx 注意!! 不是:pip install docx ...
- python如何清空excel表格_利用python操作win32com删除excel工作表
win32com是一个操作excel的接口.在使用python操作win32com的时候,默认是displayalerts的,而很多操作我们都是默认会操作,所以要关闭掉displayalerts. 下 ...
- javaweb简单的登录增删改查系统_利用python操作小程序云数据库实现简单的增删改查!
不止python,你可以利用任何语言那实现通过http请求来操作你自己的小程序云数据库了 背景 也是在最近吧,小程序更新了云开发 HTTP API 文档,提供了小程序外访问云开发资源的能力,使用 HT ...
- python删除数据库的数据完整代码_利用python操作小程序云数据库实现简单的增删改查...
不止python,你可以利用任何语言那实现通过http请求来操作你自己的小程序云数据库了 背景 也是在最近吧,小程序更新了云开发 HTTP API 文档,提供了小程序外访问云开发资源的能力,使用 HT ...
- 利用Python操作Excel实现自动化办公
1.安装 2.操作一个简单的Excel文档 操作注释及代码: 操作完成后,数据存储结果如下: 3. 操作简单Excel文档并添加数据格式 操作代码如下:附带数据格式的定义 操作效果如图所示: 4.Ex ...
- python连接sqlserver 多条sql语句后提交_利用python操作sqllite
SQLite3 可使用 sqlite3 模块与 Python 进行集成.sqlite3 模块是由 Gerhard Haring 编写的.它提供了一个与 PEP 249 描述的 DB-API 2.0 规 ...
最新文章
- go/node/python 多进程与多核cpu
- 修改用户名后TSF出现需要本地工作区。工作区 xxx 并未驻留在本计算机上
- 各大高校女生节横幅来袭,个个都是段子手
- 使用JUnit对ADF应用程序进行单元测试
- oracle导数的数据乱码,Oracle10g导数据时中文乱码相关处理
- Java BufferedWriter close()方法与示例
- 主干开发前要知道的,4错误认识+3优势
- Java 算法 质因数2
- vue路由配置src/router/index.js
- C++STL优先队列小根堆大根堆自定义的应用
- 计算机中的科学思维能力指哪三种,浅析计算机应用与科学思维能力培养
- 武汉光谷国际人工智能产业论坛之学习
- 量子计算机是否存在相对论,从量子到宇宙——颠覆人类认知的科学之旅
- 果蝇优化算法(FOA)
- 英文字母的大小写转换
- 有N个人围成一圈,从第一个人开始报数,数到3的人出列,直到最后一个人,问他的编号
- winform屏蔽鼠标事件
- java培训出来的面试经历
- 四旋翼无人机学习第23节--原理图与PCB库开源计划
- vue2+vue3小白零基础教程—vue2篇,全网2021最详细教程
热门文章
- ios编译与android编译区别是什么,为iOS和Android编译C ++代码(XCode)。 这是真的吗?...
- c# 通过字体对话框获取字体名称和字体大小_PS插件神器 :fonTags,超好用的PS字体管理插件(附安装方法)
- java 大纲,Java学科学习大纲
- python手机端自动点赞_python自动点赞功能的实现思路
- springmvc整合redis_111 SpringBoot整合Servlet JSP Filter Listener
- l1范数最小化快速算法【文献阅读】
- 【AI学院】老司机手把手带学言有三的经典书籍《深度学习之图像识别》,需要的赶紧上车吧...
- 【知识星球】Attention网络结构上新,聚焦才能赢
- 中国医药品市场供需状况与竞争前景研究报告2022年
- TCP丢包检测技术详解