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 ...
随机推荐
- 在云平台上基于Go语言+Google图表API提供二维码生成应用
二维码能够说已经深深的融入了我们的生活其中.到处可见它的身影:但通常我们都是去扫二维码, 曾经我们分享给朋友一个网址直接把Url发过去,如今我们能够把自己的信息生成二维码再分享给他人. 这里就分享一下 ...
- 【C++竞赛 E】xxx和yyy的旅行
时间限制:1s 内存限制:32MB 问题描述 有n个城市和m条双向铁路.对于任意两个不同的城市x和城市y,两个城市之间有双向铁路,否则有双向公路,通过任意一条直达公(铁)路花费一小时.城市x与城市y存 ...
- RFC chinese
rfc专业性强,现实中不可能有好的全的rfc的翻译 尝试上在github上搜索 https://github.com/tidyjiang8/6lowpan-rfcs-chinese 诚如作者所说: 在 ...
- SQLite单表4亿订单,大数据测试
[转载] SQLite单表4亿订单,大数据测试 http://www.cnblogs.com/nnhy/p/BigData.html
- 数据库基本查询语句(SQL常用增删改查语句 简单复习 mark)
SQL常用增删改查语句 1增 1.1[插入单行]insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) ...
- linux mysql 卸载,安装,測试全过程
Mysql卸载 yum remove mysql mysql-server mysql-libs compat-mysql51 rm -rf /var/lib/mysql rm /etc/my.cnf ...
- [Ramda] R.project -- Select a Subset of Properties from a Collection of Objects in Ramda
In this lesson we'll take an array of objects and map it to a new array where each object is a subse ...
- KeePass v1.30
Changes from 1.29 to 1.30: New Features:Refined application icons (thanks to Victor Andreyenkov).Add ...
- BFKit:对常用 UIButton,UIColor,UIDevice,UIFont ,UIImage 等开发类进行了扩展
BFKit对常用于开发的类进行了扩展,整合了多个常用的控件和开发所需要的功能,是一个通用性的类库.集成后可以帮助更快的App开发.有兴趣的同学可以看看哦. http://code4app.com/io ...
- ServletContextListener和ContextLoaderListener的区别
ServletContext 被 Servlet 程序用来与 Web 容器通信.例如写日志,转发请求.每一个 Web 应用程序含有一个Context,被Web应用内的各个程序共享.因为Context可 ...