MySQL Python 教程(二)

原文链接:http://zetcode.com/databases/mysqlpythontutorial/
翻译作者:kodango dangoakachan at foxmail dot com
译文链接:
a. https://kodango.com/mysql-python-tutorial-part-one
b. https://kodango.com/mysql-python-tutorial-part-two

译者注:本文的前半部分请看上一篇文章

字典游标

在 MySQLdb 模块中有许多种游标类型。默认的游标类型以元组的元组形式返回数据。当我们使用字典游标时,这些数据是以Python字典的形式返回。这样一来,我们就可以通过列名来访问数据。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import MySQLdb as mdb
import sys

con = mdb.connect('localhost', 'testuser', 
    'test623', 'testdb')

with con:

    cur = con.cursor(mdb.cursors.DictCursor)
    cur.execute("SELECT * FROM Writers")

    rows = cur.fetchall()

    for row in rows:
        print "%s %s" % (row["Id"], row["Name"])

继续阅读

MySQL Python 教程(一)

原文链接:http://zetcode.com/databases/mysqlpythontutorial/
翻译作者:kodango dangoakachan at foxmail dot com
译文链接:
a. https://kodango.com/mysql-python-tutorial-part-one
b. https://kodango.com/mysql-python-tutorial-part-two

关于本教程

这是一份介绍用Python语言操作MySQL数据库的教程,覆盖了基础的Python MySQL编程内容。本教程中使用了MySQLdb模块,文中的例子在Ubuntu系统下运行和测试。

译者注:我使用ArchLinux,会在文中添加与ArchLinux相关的内容,例子也会一一在ArchLinux下验证。

在本站中,有许多与本文类似的教程,其中包括PostgreSQL PythonMySQL Visual BasicMySQL PHP。如果你需要更新与Python语言相关的知识,在这里还有一份完整的Python教程。你也可以考虑阅读MySQL教程

关于MySQL数据库

MySQL是一个领先的开源数据库管理系统。它是一个多用户,多线程的数据库管理系统。MySQL在网上非常流行,它与Linux、Apache、PHP一起组成LAMP平台,这是一个非常流行的Web平台。目前,MySQL是由甲骨文拥有。MySQL数据库可用于最重要的几个操作系统上。它能够运行在BSD UNIX,Linux,Windows或Mac操作系统之上。

继续阅读

MySQL 笔记

这篇笔记,主要是为了记录 MySQL 一些有用的SQL语句和命令。以前在学校里,接触数据库不多,以至于在面试的时候总是被问得非常难堪。现在在公司里,突然发现好多东西是需要学的。

1. 列出所有的表

show tables;

2. 查询表结构

describe table_name;
show columns from table_name;
show create table table_name;

3. 查询表中的第几行

select * from table_name limit n;   查询前n行
select * from table_name limit n-1, m-n; 查询从第n行开始的m行的记录

4. 设置数据库编码

set names utf8;

继续阅读

ArchLinux 安装笔记

更新:10.06版本的ArchLinux安装见ArchLinux 10.06安装

ArchLinux已经使用了将近一年了,不过中间找工作、写论文,已经有一段时间没有使用Linux操作系统了。最近因为公司发了一台本本作为办公使用,计划拿到手后安装一个ArchLinux操作系统。对于ArchLinux这个系统,我自己是非常喜欢的,小巧简单,文档丰富(Linux发行版的文档其实都相当丰富),社区完善,一般的问题通过Google搜索都可以找到答案。这篇文章主要,是为了接下来的安装过程做一个笔记,包括系统的配置、软件的安装以及问题的解决之类的。

安装步骤

1. 下载安装镜像

推荐从网易的开源镜像站下载:下载地址

继续阅读

理解 Python 语言中的 defaultdict

原作者: Jason Kirtland
日期: January 13th, 2009
许可证: Creative Commons Attribution-Share Alike 3.0
原文链接(PPT): http://discorporate.us/jek/talks/defaultdict/
翻译作者:kodango <dangoakachan@foxmail.com>
翻译时间:March 17th, 2012

今天看到一篇讲defaultdict的PPT,同时第一次见到__missing__()这个方法,好奇之下,仔细阅读了这篇PPT。看完之后随手做笔记,分享给有需要的人。准确地说,这篇文章不是纯粹的翻译,因为原文本身只是一份PPT。文章的大多数文字内容,都是本人的阅读心得。

默认值可以很方便

众所周知,在Python中如果访问字典中不存在的键,会引发KeyError异常(JavaScript中如果对象中不存在某个属性,则返回undefined)。但是有时候,字典中的每个键都存在默认值是非常方便的。例如下面的例子:

strings = ('puppy', 'kitten', 'puppy', 'puppy',
           'weasel', 'puppy', 'kitten', 'puppy')
counts = {}

for kw in strings:
    counts[kw] += 1

该例子统计strings中某个单词出现的次数,并在counts字典中作记录。单词每出现一次,在counts相对应的键所存的值数字加1。但是事实上,运行这段代码会抛出KeyError异常,出现的时机是每个单词第一次统计的时候,因为Python的dict中不存在默认值的说法,可以在Python命令行中验证:

>>> counts = dict()
>>> counts
{}
>>> counts['puppy'] += 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'puppy'

继续阅读

理解 Python 中的 *args 和 **kwargs

Python是支持可变参数的,最简单的方法莫过于使用默认参数,例如:

def test_defargs(one, two = 2):
   print 'Required argument: ', one
   print 'Optional argument: ', two

test_defargs(1)
# result:
# Required argument: 1
# Optional argument: 2

test_defargs(1, 3)
# result:
# Required argument: 1
# Optional argument: 3

当然,本文章的主题并不是讲默认参数,而是另外一种达到可变参数 (Variable Argument) 的方法:使用*args和**kwargs语法。其中,*args是可变的positional arguments列表,**kwargs是可变的keyword arguments列表。并且,*args必须位于**kwargs之前,因为positional arguments必须位于keyword arguments之前。

继续阅读

PySqlite 学习笔记

这是一篇老笔记,原来是放在旧博客上的,最近因为公司内部一个小东西,想使用简单点的数据库来存储数据,就想起用SQLite来做,上网搜索一些教程。竟然发现,原来一年多前,我也学过一阵子,可惜因为不常用,现在已经基本忘记光光了,加上自己对数据库向来不是非常熟悉,就特地放到新博客上,顺便回顾一下。

这篇笔记的主要内容来源于python之sqlite3使用详解PySqlite简明教程

SQlite这个小型数据库,经常在Firefox或者其它软件中看到,它貌似没有独立的维护进程,而是把所有数据都存放在一个单独的文件中。上网搜了下资料,看了看Python上的pysqlite模块,它正是Python中对sqlite的封装实现。

数据库操作

Python的数据库模块都有统一的接口标准,所以数据库操作都基本上是统一的,基本上分成以下几步(假设数据库模块为db):

  1. 用db.connect()创建数据库连接,连接对象为conn。
  2. 如果不需要返回查询结果,就直接调用conn.execute()。
  3. 如果需要返回查询结果,则需要首先通过conn.cursor()创建游标对象cur,并使用cur.fetchone()等函数获取查询结果。
  4. 根据数据库隔离级别的不同,修改数据库后,可能需要使用conn.commit()手动提交事务。
  5. 调用相应的close()方法关闭cur及conn。

继续阅读

恢复复制功能脚本

有些网站(例如起点等)为了版权问题而禁用了右键复制的功能,甚至替换了右键菜单(例如起点),这个脚本的作用就是为了重新恢复禁用的复制功能(当然可以扩展其它功能,比如恢复右键菜单)。这个脚本的初衷是,我在准备驾校理论考的时候,在tieba.jxydt.com查找信息并且做笔记的时候,却发现该网站禁用了复制功能,那时候非常无奈,就开始动手写这个脚本,后来为了考虑一些扩展性,添加、封装了一些代码。

总体来说,这个脚本的扩展性还是可以的。可以非常方便的添加更多需要恢复复制功能的网站,但是我个人不是非常满意,觉得有些地方代码有点臃肿了。当然后期的进一步完善,还是需要更多朋友提供建议和反馈。脚本目前支持Firefox和Chrome,其它浏览器未测试。

最新版的代码可以在UserScripts.org下载:地址

原理很简单,无非是找到相关的页面元素,删除或者替换与复制相关的事件,例如oncopy/onselectstart/oncontextmenu/onmousedown等等。如果有一点JavaScript代码的基础,可以参考脚本中已有的网站支持的代码添加新站点支持。不然你可以在这里留言,我会帮你添加。

继续阅读