第二十章、 数据库编程
环境设置
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. Win7的ftp功能

    ftp作为文件传输协议,在一些特殊情况下用这种文件传输是比较方便的,并且win7本身也支持这个功能,在控制面板--->程序-->打开或关闭Windows功能,安装即可: 然后在管理控制台中 ...

  2. 在vue中使用nprogress

    NProgress的官网:http://ricostacruz.com/nprogress/        源码地址:https://github.com/rstacruz/nprogress 1.安 ...

  3. HDU 2852 KiKi's K-Number 树状数组

    先补充从n个数中求第k小数的理论知识........ 睡觉去~ ------------------------------------------又要睡觉的分割线------------------ ...

  4. 中小研发团队架构实践之分布式协调器.Net版ZooKeeper

    原文:中小研发团队架构实践之分布式协调器.Net版ZooKeeper 一.ZooKeeper是什么  Apache ZooKeeper是由Apache Hadoop的子项目发展而来,于2010年11月 ...

  5. Python数据分析环境和工具

    一.数据分析工作环境 Anaconda: Anaconda(水蟒)是一个科学计算软件发行版,集成了大量常用扩展包的环境,包含了 Python 解释器,conda 包管理工具,以及 NumPy.Pand ...

  6. 一个神奇的控件——Android CoordinatorLayout与Behavior使用指南

    CoordinatorLayout是support.design包中的控件,它可以说是Design库中最重要的控件. 本文通过模仿知乎介绍了自定义Behavior,通过模仿百度地图介绍了BottomS ...

  7. 百度地图坐标之间的距离php

    function GetDistance($lat1, $lng1, $lat2, $lng2){ define('PI',3.1415926535898); define('EARTH_RADIUS ...

  8. AOP概述:

    AOP可以在不修改源代码的情况下,对程序进行增强. AOP面向切面进行编程,Spring将AOP引入到框架中,但是也需要遵守AOP联盟的规范. 通过预编译的方式和运行期动态代理实现程序功能的同意维护的 ...

  9. Windows Phone 8.1 控件

    如果你已经开始了 Windows Phone 8.1 的学习,就会发现许多在 8.0 下的控件在 8.1 中都发生了变化,以下就谈谈几个 8.1 下的新控件以及与 8.0 控件的改变. 1. Text ...

  10. 关于IT增值服务"拜师学艺"价格调整的通知

    经过几天的探索,在与若干潜在付费客户交流的基础上,决定对IT增值服务"拜师学艺"价格进行调整. 当前价格:年费1000元,月付100元-1年付10个月. 2015年1月1日起,年费 ...