第二十章、 数据库编程
环境设置
1).安装MySQL-python
http://www.lfd.uci.edu/~gohlke/pythonlibs/
MySQL-python-1.2.3.win32-py2.7.exe
1)    使用数据库接口

import MySQLdb  

cxn = MySQLdb.Connect(host = '127.0.0.1', user = 'root', passwd = 'root') 
cur = cxn.cursor()  

try: 
    cur.execute("DROP DATABASE test610") 
except Exception, e: 
    print e.args; 
finally: 
    pass  

cur.execute("CREATE DATABASE test610") 
cur.execute("USE test610") 
cur.execute("CREATE TABLE users (id INT, name VARCHAR(8))") 
cur.execute("INSERT INTO users VALUES(10, 'tao')") 
cur.execute("INSERT INTO users VALUES(20, 'jin')") 
cur.execute("INSERT INTO users VALUES(31, 'dan')") 
cur.execute("UPDATE users SET name = 'jim' WHERE id = 20") 
cur.execute("SELECT * FROM users") 
for row in cur.fetchall(): 
    print '%s\t%s' %row  

cur.close() 
cxn.commit() 
cxn.close() 

2)    使用ORM_SQLalchemy
环境设置
安装SQLalchemy(SQLAlchemy-0.7.1.tar.gz)
下载http://www.sqlalchemy.org/download.html
解压放到python安装目录下的lib目录里

D:\Python27\Lib\SQLAlchemy-0.7.1>python setup.py install 
from sqlalchemy import *  

##Precondition:database 'test0615' do exist! 
engine = create_engine('mysql://root:root@localhost/test0615')  

##Define and Create Tables 
metadata = MetaData() 
users = Table('users', metadata, 
        Column('id', Integer, primary_key=True), 
        Column('name', String(10)), 
        Column('fullname', String(20)), 
        ) 
address = Table('address', metadata, 
        Column('id', Integer, primary_key=True), 
        Column('user_id', None, ForeignKey('users.id')), 
        Column('email', String(20), nullable=False) 
        ) 
metadata.create_all(engine, checkfirst = True)  

##Insert Expressions 
#method 1 
ins = users.insert().values(name='Jim', fullname='Jim T') 
conn = engine.connect() 
result = conn.execute(ins) 
#method 2 
result = engine.execute(users.insert(), name='fred', fullname="Fred F") 
#method 3 
metadata.bind = engine 
result = users.insert().execute(name="mary", fullname="Mary C") 
metadata.bind = None 
#method 4 
conn.execute(address.insert(), [ 
    {'user_id': 1, 'email' : 'jack@yao.com'}, 
    {'user_id': 2, 'email' : 'wedy@aol.com'}, 
    ])  

##Selecting 
s = select([users]) 
result = conn.execute(s) 
#method 1 
for row in result: 
    print row 
#method 2 
s = select([users, address], users.c.id==address.c.user_id) 
for row in conn.execute(s): 
    print row  

##Updates 
conn.execute(users.update(). 
    where(users.c.name == 'jack'). 
    values(name = 'ed') 
    )  

##Deletes 
conn.execute(address.delete().where(address.c.id > 20)) 
conn.execute(users.delete().where(users.c.name > 'm'))  

##遗留问题,无法关闭数据库连接 
##metadata.drop_all(engine, [users, address], checkfirst = False) 

3)    使用ORM_SQLObject
环境设置
安装FormEncode (FormEncode-1.2.4.tar.gz)
下载http://pypi.python.org/pypi/FormEncode
解压放到python安装目录下的lib目录里

D:\Python27\Lib\FormEncode-1.2.4>python setup.py install

安装SQLObject (SQLObject-1.0.1.tar.gz)
下载http://pypi.python.org/pypi/SQLObject
解压放到python安装目录下的lib目录里

D:\Python27\Lib\SQLObject-1.0.1>python setup.py install
#!/usr/bin/env python  

import os 
import MySQLdb 
import _mysql_exceptions 
from sqlobject import *  

DBNAME = 'database0615' 
url = 'mysql://root:root@localhost/%s' % DBNAME 
COLSIZ = 10 
FIELDS = ('firstName', 'middleInitial', 'lastName')  

cxn1 = sqlhub.processConnection = connectionForURI(url) 
cxn1.query("DROP DATABASE %s" % DBNAME) 
cxn1.query("CREATE DATABASE %s" % DBNAME) 
cxn1.close()  

try: 
    class Person(SQLObject): 
        firstName = StringCol() 
        middleInitial = StringCol(length=1, default=None) 
        lastName = StringCol() 
    Person.createTable() 
except NameError, e: 
    pass  

#make SQLObject print out the SQL it executes 
Person._connection.debug = False  

#Insert 
p1 = Person(firstName = "John", lastName = "Doe") 
p2 = Person(firstName = "Jin", lastName = "Tao") 
p3 = Person(firstName = "Dan", lastName = "Tao") 
p4 = Person(firstName = "Joan", lastName = "Wu")  

#Select 
print p2.lastName, p2.firstName 
print list(Person.select(AND(Person.q.lastName == "Tao", 
           Person.q.firstName == "Jin")))  

#Update 
p1.middleInitial = 'S' 
p3.middleInitial = 'T' 
p2.lastName = 'Hu'  

#Delete 
Person.delete(p1.id) 
for row in Person.select(): 
    print '%s%s%s' % (tuple([str(getattr(row, 
        field)).title().ljust(COLSIZ) for field in FIELDS])) 
Person.deleteBy() 

python 教程 第二十章、 数据库编程的更多相关文章

  1. C#图解教程 第二十章 异步编程

    笔记 异步编程 什么是异步 示例 async/await特性的结构什么是异步方法 异步方法的控制流await表达式取消一个异步操作异常处理和await表达式在调用方法中同步地等待任务在异步方法中异步地 ...

  2. Python教程:操作数据库,MySql的安装详解

    各位志同道合的同仁请点击上方关注 本教程是基于Python语言的深入学习.本次主要介绍MySql数据库软件的安装.不限制语言语法,对MySql数据库安装有疑惑的各位同仁都可以查看一下. 如想查看学习P ...

  3. python 教程 第二十二章、 其它应用

    第二十二章. 其它应用 1)    Web服务 ##代码 s 000063.SZ ##开盘 o 26.60 ##最高 h 27.05 ##最低 g 26.52 ##最新 l1 26.66 ##涨跌 c ...

  4. 简明python教程七----面向对象的编程

    根据操作数据的函数或语句块来设计程序的,被称为面向过程的编程. 把数据和功能结合起来,用称为对象的东西包裹起来的组织程序的方法,称为面向对象的编程理念. 类和对象是面向对象编程的两个主要方面.类创建一 ...

  5. python 教程 第二十一章、 扩展Python

    第二十一章. 扩展Python /* D:\Python27\Lib\Extest-1.0\Extest2.c */ #include <stdio.h> #include <std ...

  6. python 教程 第十章、 输入/输出

    第十章. 输入/输出 1)    文件 poem = '''Programming is fun use Python!''' f = file('poem.txt', 'w') # open for ...

  7. 进击的Python【第二十章】

    1.Django请求的生命周期 路由系统 -> 试图函数(获取模板+数据=>渲染) -> 字符串返回给用户 2.路由系统 /index/ -> 函数或类.as_view() / ...

  8. C# 图解教程 第二章 C#编程概述

    C#编程概述 一个简单的C#程序标识符关键字Main:程序的起始点从程序输出文本注释 C#编程概述 一个简单的C#程序 标识符 标识符是一种字符串,用来命名变量.方法.参数和许多后面将要阐述的其他程序 ...

  9. python下的MySQL数据库编程

    https://www.tutorialspoint.com/python/python_database_access.htm if you need to access an Oracle dat ...

随机推荐

  1. 【u230】回文词

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] CR喜欢研究回文词,有天他发现一篇文章,里面有很多回文数,这使他来了兴趣.他决定找出所有长度在n个字节 ...

  2. ERROR:column &quot;rolcatupdate&quot; does not exist

    1.错误描写叙述 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/ ...

  3. 使用RxPermissions(基于RxJava2)

    使用RxPermissions(基于RxJava2) 0. 背景 Android 6.0 (API level 23)中.将权限分成了两类.一类是Install权限(称之为安装时权限).还有一类是Ru ...

  4. Java 网络I/O模型

    网络I/O模型 人多了,就会有问题.web刚出现的时候,光顾的人很少.近年来网络应用规模逐渐扩大,应用的架构也需要随之改变.C10k的问题,让工程师们需要思考服务的性能与应用的并发能力. 网络应用需要 ...

  5. android环境安装

    引言   在windows安装Android的开发环境不简单也说不上算复杂,本文写给第一次想在自己Windows上建立Android开发环境投入Android浪潮的朋友们,为了确保大家能顺利完成开发环 ...

  6. 【53.61%】【BZOJ 2302】[HAOI2011]Problem c

    Time Limit: 30 Sec Memory Limit: 256 MB Submit: 526 Solved: 282 [Submit][Status][Discuss] Descriptio ...

  7. java判断字符串是否为数字

    我们在做安卓开发中,一定会遇到判断某字符串是否是数字的问题,本文使用正则表达式可以很方便的判断出来,希望本文对安卓开发者有所帮助.   1 public boolean isNumeric(Strin ...

  8. php利用反射机制查找类和方法的所在位置

    //参数1是类名,参数2是方法名 $func = new ReflectionMethod('UnifiedOrder_pub', 'getPrepayId'); //从第几行开始 $start = ...

  9. 【14.06%】【hdu 5904】LCIS

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission ...

  10. [Compose] Isomorphisms and round trip data transformations

    What is Isomorphisms?We have a value x, then apply function 'to' and 'from' to value 'x', the result ...