python 教程 第二十章、 数据库编程
第二十章、 数据库编程
环境设置
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 教程 第二十章、 数据库编程的更多相关文章
- C#图解教程 第二十章 异步编程
笔记 异步编程 什么是异步 示例 async/await特性的结构什么是异步方法 异步方法的控制流await表达式取消一个异步操作异常处理和await表达式在调用方法中同步地等待任务在异步方法中异步地 ...
- Python教程:操作数据库,MySql的安装详解
各位志同道合的同仁请点击上方关注 本教程是基于Python语言的深入学习.本次主要介绍MySql数据库软件的安装.不限制语言语法,对MySql数据库安装有疑惑的各位同仁都可以查看一下. 如想查看学习P ...
- python 教程 第二十二章、 其它应用
第二十二章. 其它应用 1) Web服务 ##代码 s 000063.SZ ##开盘 o 26.60 ##最高 h 27.05 ##最低 g 26.52 ##最新 l1 26.66 ##涨跌 c ...
- 简明python教程七----面向对象的编程
根据操作数据的函数或语句块来设计程序的,被称为面向过程的编程. 把数据和功能结合起来,用称为对象的东西包裹起来的组织程序的方法,称为面向对象的编程理念. 类和对象是面向对象编程的两个主要方面.类创建一 ...
- python 教程 第二十一章、 扩展Python
第二十一章. 扩展Python /* D:\Python27\Lib\Extest-1.0\Extest2.c */ #include <stdio.h> #include <std ...
- python 教程 第十章、 输入/输出
第十章. 输入/输出 1) 文件 poem = '''Programming is fun use Python!''' f = file('poem.txt', 'w') # open for ...
- 进击的Python【第二十章】
1.Django请求的生命周期 路由系统 -> 试图函数(获取模板+数据=>渲染) -> 字符串返回给用户 2.路由系统 /index/ -> 函数或类.as_view() / ...
- C# 图解教程 第二章 C#编程概述
C#编程概述 一个简单的C#程序标识符关键字Main:程序的起始点从程序输出文本注释 C#编程概述 一个简单的C#程序 标识符 标识符是一种字符串,用来命名变量.方法.参数和许多后面将要阐述的其他程序 ...
- python下的MySQL数据库编程
https://www.tutorialspoint.com/python/python_database_access.htm if you need to access an Oracle dat ...
随机推荐
- 23种设计模式——Prototype模式
Prototype模式是提供自我复制的功能.包括浅拷贝和深拷贝. 一.Prototype模式的用途 场景1:游戏场景中有很多类似的敌人,它们的技能都一样,但是随着敌人出现的位置和不同,它们的能力也不太 ...
- [MobX] MobX fundamentals: deriving computed values and managing side effects with reactions
Derivations form the backbone of MobX and come in two flavors: computed values are values that can b ...
- [Angular2 Form] patchValue, setValue and reset() for Form
Learn how to update part of form model, full form model and reset whole form. We have form definetio ...
- 微信开发学习日记(七):开源微商城wemall
最近嘛,不是在调研PHP和微信的行情么. 发现,微商城是非常火爆的一个领域,既然业务有搞头,那么技术这一块也有很多选择. 网上发现了wemall这个开源的PHP实现的微商城. 下载了开源版本,PHP后 ...
- [SCSS] Organize Styles with SCSS Nesting and the Parent Selector
SCSS nesting can produce DRYer code by targeting child elements without having to write the parent c ...
- JS表格分页组件:fupage的设计思路和具体用法(未来考虑开源,争取在2015年)
一.背景 之前在秒针工作的时候,某js高级工程师写了很多自己的组件,其中一套是分页组件,叫做st-grid.不过在我看来,bug太多,我经常给他反馈bug,我也不清楚为啥别人没有发现. ...
- android生成分享长图而且加入全图水印
尊重他人的劳动成果.转载请标明出处:http://blog.csdn.net/gengqiquan/article/details/65938021. 本文出自:[gengqiquan的博客] 领导近 ...
- 将asp.net core2.0项目部署在IIS上运行
原文:将asp.net core2.0项目部署在IIS上运行 前言: 与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是独立运行的.它独立运行在控 ...
- 【SSH2(理论+实践)】--图说Struts2的执行
前几篇文章讨论了有关Struts2的核心机制及一些基础,但同一时候也遗留下了非常多问题.这些问题主要是针对Struts2的一些使用技巧的,该篇文章将会针对Struts2的使用技巧进行讨论, ...
- 小强的HTML5移动开发之路(35)——jQuery中的过滤器详解
1.基本过滤选择器 :first :last :not(selector) :selector匹配的节点之外的节点 :even :偶数 :odd :奇数 :eq(index) :gt(index) : ...