第二十章、 数据库编程
环境设置
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. angular项目国际化配置(ngx-translate)

    原文 https://www.jianshu.com/p/7d1da3098625 大纲 1.认识ngx-translate 2.ngx-translate的配置步骤 3.ngx-translate的 ...

  2. [Recompose] Add Local State with Redux-like Reducers using Recompose

    Learn how to use the 'withReducer' higher order component using the alternative reducer form. If you ...

  3. OpenStack 之 Nova Compute 的代码结构图

    nova-compute 的代码结构图 如上图所看到的, 类图中最重要的三个Category Manager: 核心的业务类.提供实际的业务操作.比如启动虚拟机等等. Service: 每一个serv ...

  4. Windows环境搭建Web自己主动化測试框架Watir(基于Ruby)

    web自己主动化測试一直是一个比較迫切的问题 图1-1 须要安装的工具 http://railsinstaller.org/ 由于安装Ruby还须要用到其它的一些开发工具集.所以建议从站点http:/ ...

  5. ArcGIS 帮助文件中的CAD数据的说明

    专业库——地理数据类型——cad

  6. [GraphQL] Add an Interface to a GraphQL Schema

    As we start building out more complex GraphQL schemas, certain fields start to repeat across differe ...

  7. 【codeforces 754A】Lesha and array splitting

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  8. JAVA中String类的intern()方法的作用

    一般我们变成很少使用到 intern这个方法,今天我就来解释一下这个方法是干什么的,做什么用的 首先请大家看一个例子: public static void main(String[] args) t ...

  9. Erlang 位串和二进制数据

    http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=25876834&id=3300393 因为在本人工作中,服务端Erla ...

  10. Android核心功能开发SearchView使用的开发(代码共享)

    在Android上.搜索是一个核心的用户功能.用户可以搜索可用的任何数据,的内容是否存储在设备本身或者需要促进网络接入上.Android它提供了一个框架,为用户创造一个一致的搜索的搜索体验,它可以帮你 ...