Mysql Cookbook学习笔记第二章

1,使用python链接mysql

+ ?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

# -*- coding: utf-8 -*-

# connect.py --连接到MySQL服务器

import
sys

import
MySQLdb

try:

    conn =
MySQLdb.connect(db =
"cookbook",

                           host =
"localhost",

                           user =
"burness",

                           passwd =
"123456")

    print
"Connected"

except:

    print
"Cannot connect to server"

    sys.exit(1)

conn.close()

print
"Disconnected"

2,使用python操作过程中提示出错信息以便于调试

+ ?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

# -*- coding: utf-8 -*-

# connect.py --连接到MySQL服务器

import
sys

import
MySQLdb

try:

    conn =
MySQLdb.connect(db =
"cookbook",

                           host =
"localhost",

                           user =
"burness",

                           passwd =
"123456")

    print
"Connected"

except
MySQLdb.Error, e:

    print
"Cannot connect to server"

    print
"Error code:", e.args[0]

    print
"Error message:", e.args[1]

    sys.exit(1)

conn.close()

print
"Disconnected"

例如:使用错误的密码:

3,编写库文件


库文件可以简化在程序中频繁使用配置参数,以及保证一些数据的隐秘性如密码

例如 Cookbook.py内保存有数据库连接的内容:

+ ?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

# -*- coding: utf-8 -*-

# Cookbook.py -具有通过MySQLdb模块连接MySQL的工具方法的库文件

import
MySQLdb

host_name="localhost"

db_name="cookbook"

user_name="burness"

password="123456"

# 建立一个到cookbook数据库的连接,返回一个connection对象

# 如果不能建立连接则抛出一个异常。

def
connect():

    return
MySQLdb.connect(db=db_name,

                           host=host_name,

                           user=user_name,

                           passwd=password)

harness.py 测试Cookbook.py

+ ?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

import
sys

import
MySQLdb

import
Cookbook

# 用来测试Cookbook.py

try:

    conn=Cookbook.connect()

    print
"Connected"

except
MySQLdb.Error, e:

    print
"Cannot connect to serve"

    print
"Error code:",e.args[0]

    print
"Error message:",e.args[1]

    sys.exit(1)

conn.close()

print
"Disconnected"

4,发起语句并检索结果

python 中MySQLdb使用cursor来进行execute的操作,不返回结果如update:

+ ?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

expand sourceview source

print?·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150

01.import
sys

02.import
MySQLdb

03.import
Cookbook

04.# 用来测试Cookbook.py

05.try:

06.   
conn=Cookbook.connect()

07.   
print "Connected"

08.except
MySQLdb.Error, e:

09.   
print "Cannot connect to serve"

10.   
print "Error code:",e.args[0]

11.   
print "Error message:",e.args[1]

12.   
sys.exit(1)

13.# cursor=conn.cursor()

14.# 使用行作为命名元素

15.cursor
= conn.cursor(MySQLdb.cursors.DictCursor)

16.cursor.execute("select id, name, cats from profile")

17.rows=cursor.fetchall()

18.#for row in rows:

19.#    print "id:%s, name: %s, cats: %s" % (row[0],row[1],row[2])

20.for
row in
rows:

21.   
print "id:%s, name: %s, cats: %s" % (row["id"],row["name"],row["cats"])

22.print
"Number of rows returned: %d" % cursor.rowcount

23.conn.close()

24.print
"Disconnected"

返回结果,如select

+ ?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

import
sys

import
MySQLdb

import
Cookbook

# 用来测试Cookbook.py

try:

    conn=Cookbook.connect()

    print
"Connected"

except
MySQLdb.Error, e:

    print
"Cannot connect to serve"

    print
"Error code:",e.args[0]

    print
"Error message:",e.args[1]

    sys.exit(1)

cursor=conn.cursor()

cursor.execute("select id, name, cats from profile")

while
1:

    row=cursor.fetchone()# fetchone用来顺序返回下一行

    if
row==None:

        break

    print
"id: %s, name: %s, cats: %s" %(row[0],row[1],row[2])

print
"Number of rows returned: %d" % cursor.rowcount

conn.close()

print
"Disconnected"

使用fetchall()可以一次返回整个满足条件的结果集

+ ?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

import
sys

import
MySQLdb

import
Cookbook

# 用来测试Cookbook.py

try:

    conn=Cookbook.connect()

    print
"Connected"

except
MySQLdb.Error, e:

    print
"Cannot connect to serve"

    print
"Error code:",e.args[0]

    print
"Error message:",e.args[1]

    sys.exit(1)

# cursor=conn.cursor()

# 使用行作为命名元素

cursor =
conn.cursor(MySQLdb.cursors.DictCursor)

cursor.execute("select id, name, cats from profile")

rows=cursor.fetchall()

#for row in rows:

#    print "id:%s, name: %s, cats: %s" % (row[0],row[1],row[2])

for
row in
rows:

    print
"id:%s, name: %s, cats: %s" % (row["id"],row["name"],row["cats"])

print
"Number of rows returned: %d" % cursor.rowcount

conn.close()

print
"Disconnected"

5,处理语句中的特殊字符和NULL值

占位符机制和引用:

python中可以使用格式化来进行占位符的使用

+ ?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

import
sys

import
MySQLdb

import
Cookbook

# 用来测试Cookbook.py

try:

    conn=Cookbook.connect()

    print
"Connected"

except
MySQLdb.Error, e:

    print
"Cannot connect to serve"

    print
"Error code:",e.args[0]

    print
"Error message:",e.args[1]

    sys.exit(1)

cursor =
conn.cursor()

# 使用占位符来与mysql交互,python中支持格式化符号用来作为占位符

cursor.execute("""insert into profile (name,birth,color,foods,cats)values(%s,%s,%s,%s,%s)""",("De‘Mont","1973-01-12",None,"eggroll",4))

print
"Number of rows update: %d"%cursor.rowcount

cursor2=conn.cursor()

cursor2.execute("select * from profile")

rows=cursor2.fetchall()

for
row in
rows:

    print
"id:%s, name: %s, cats: %s" % (row[0],row[1],row[2])

print
"Number of rows returned: %d" % cursor2.rowcount

conn.close()

print
"Disconnected"

另外一个方法是MySQLdb引用时使用literal()方法

+ ?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

import
sys

import
MySQLdb

import
Cookbook

# 用来测试Cookbook.py

try:

    conn=Cookbook.connect()

    print
"Connected"

except
MySQLdb.Error, e:

    print
"Cannot connect to serve"

    print
"Error code:",e.args[0]

    print
"Error message:",e.args[1]

    sys.exit(1)

# cursor=conn.cursor()

# 使用行作为命名元素

cursor =
conn.cursor()

# 使用占位符来与mysql交互,python中支持格式化符号用来作为占位符

cursor.execute("""insert into profile (name,birth,color,foods,cats)

values(%s,%s,%s,%s,%s)"""%(conn.literal("123123123123"),conn.literal("1973-01-12"),conn.literal("123"),conn.literal("eggroll"),conn.literal(4)))

conn.commit()# 必须要有这个才能提交,才会有保存

print
"Number of rows update: %d"%cursor.rowcount

conn.close()

print
"Disconnected"

在实验代码的过程中发现上一个运行后在本地mysql数据库中没有保存,google之后发现必须在完成之后运行conn.commit()才能使更改保存!!!

6,识别结果集中的NULL值

python程序使用None来表示结果集中的NULL,代码如下:

+ ?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

import
sys

import
MySQLdb

import
Cookbook

# 用来测试Cookbook.py

try:

    conn=Cookbook.connect()

    print
"Connected"

except
MySQLdb.Error, e:

    print
"Cannot connect to serve"

    print
"Error code:",e.args[0]

    print
"Error message:",e.args[1]

    sys.exit(1)

# cursor=conn.cursor()

# 使用行作为命名元素

cursor =
conn.cursor()

# 使用占位符来与mysql交互,python中支持格式化符号用来作为占位符

cursor.execute("select name, birth, foods from profile")

for
row in
cursor.fetchall():

    row=list(row)

    for
i in
range(0,len(row)):

        if
row[i]==None:

            row[i]="NULL"

    print
"name: %s, birth: %s, food: %s"%(row[0],row[1],row[2])

conn.close()

print
"Disconnected"

7,获取连接参数的技术

a,将参数硬编码到程序中;b,交互式请求参数;c,从命令行获取参数;d,从执行环境获取参数;e,从一个独立的文件中获取参数

从命令行得到参数可以通过getopt.getopt,具体代码如下:

+ ?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

# -*- coding: cp936 -*-

#cmdline.py -- 说明Python中的命令行选项解析

import
sys

import
getopt

import
MySQLdb

try:

    opts, args=getopt.getopt(sys.argv[1:],"h:p:u:",["host=","password=","user="])# h: p: u: 表示后面都带参数 如是hp:则说明h不带参数

    print
opts

except
getopt.error,e:

    #对于错误,输出程序名以及错误信息文本

    print
"%s: %s" %(sys.argv[0],e)

    sys.exit(1)

host_name=password=user_name=""

for
opt,arg in
opts:

    if
opt in
("-h","--host"):

        host_name=arg

    elif
opt in
("-p","--password"):

        password=arg

    elif
opt in
("-u","--user"):

        user_name=arg

#所有剩下的非选项参数都保留在args中,并可在这里做必要的处理

try:

    conn=MySQLdb.connect(db="cookbook",host=host_name,user=user_name,passwd=password)

    print
"Connected"

except
MySQLdb.Error,e:

    print
"Cannot connect to server"

    print
"Error:",e.args[1]

    print
"Code:",e.args[0]

    sys.exit(1)

conn.close()

print
"Disconnected"

从选项文件获取参数

Unix下有/etc/my.cnf,mysql安装目录的my.cnf,以及当前用户的~/.my.cnf(按系统查找顺序来),当存在多个时,最后发现的具有最高优先级而在windows下安装目录my.ini,windows根目录my.ini或者my.cnf

Mysql Cookbook学习笔记第二章,码迷,mamicode.com

时间: 2025-01-02 14:13:43

Mysql Cookbook学习笔记第二章的相关文章

【PMP】Head First PMP 学习笔记 第二章 组织、约束和项目

第二章 组织.约束和项目 如果你希望正确地完成工作--最好有一个正确的组织. 项目联络人 项目联络人(project expediter),只是记录项目的进展情况,但是没有权利对项目做任何决策.他可能参与项目,但是并不管理任何事务. 不同类型的组织项目 职能型 项目经理的决策需要和职能经理确认 项目经理作为职能经理的助手,协助职能经理完成工作 项目经理大部分时间都用于行政任务,通常只有部分时间投入到项目管理中 在职能型组织中往往会有项目联络人 矩阵型 弱矩阵型 项目经理有一些经理有一些权利,但是

c#高级编程第七版 学习笔记 第二章 核心c#

第二章 核心C# 本章内容: 声明变量 变量的初始化和作用域 C#的预定义数据类型 在c#程序中使用条件语句.循环和跳转语句执行流 枚举 名称空间 Main()方法 基本的命令行c#编译器选项 使用System.Console执行控制台I/O 使用内部注释和文档编制功能 预处理器指令 C#编程的推荐规则和约定 2.1 第一个c#程序 2.1.1 代码 using System; namespace Wrox { Public class MyFirstClass { static void Ma

Android学习笔记—第二章 Android四大组件

第二章 Android四大组件 Activity(活动窗口): Android程序中最基本的模块,为用户操作而展示的可视化用户界面.一个Android应用程序可以只有一个Activity,也可以包含多个Activity,数量及每个Activity的作用取决于应用程序及其设计. (1)Activity的生命周期 创建→运行   onCreate   onStart   onResume 运行→销毁   onPause    onStop    onDestory 运行→停止(不可见  不可操作)

《操作系统概念》学习笔记-第二章

第二章 操作系统结构 在具有多个命令解释程序选择的系统中,解释程序被称为外壳(shell) 命令解释程序的主要作用是获取并执行用户指定的下一条命令. 有三种应用程序员常用的API,适用于windows系统的win32API,适用于POSIX系统的POSIX API,以及用于设计运行于JAVA虚拟机程序的JAVA API. 操作系统传递参数有三种方法: 最简单的方法是通过寄存器来传递参数,不过有时,参数数量会比寄存器多,这时,这些参数通常存在内存的块和表中,并将块的地址通过寄存器来传递.Linux

MySQL Cookbook学习笔记第四章

1,克隆表(创建一个恰好与某个已有表结构一致的表) create table - like克隆表结构:使用insert into - select语句克隆部分或者全部表数据 2,将查询结果保存到表中 a,使用insert into...select将语句查询结果插入表中,若表不存在需要使用create table -select 语句为查询结果新建一张表. insert into dst_tb1(i,s) select val, name from src_tb1 insert into dst

信息检索导论学习笔记 -- 第二章:词项词典及倒排记录表

2.1.1 文档分析及编码转换:      文档处理第一步,是将文件或web服务器上的一系列二进制字节序列转换为字符序列.      在实际中,首先要判断出文档的编码方式(机器学习分类.启发式等方法),确定文档的类型(word?zip?)然后将字节序列转换成字符序列. 2.1.2 文档单位(document unit)的选择:      常见的,将某个目录下的每个文件都看成一个文档.      但有些情况并非如此,比如我们可能希望将邮件.附件(附件中的文件)分开.      对于一个长文档而言,

Solr in action学习笔记 第二章Getting to know Solr

2.1Getting started *Solr实际是使用http通信,所以可以使用任何语言的API *Solr的一个core包含solr配置文件,lucene索引文件和solr的日志文件 在分布式系统的上下文中,成为collection *Solr还提供COre Admin API *query 当query参数设置好,实质上是向solr服务器发送一个http GET请求 搜索参数: 可以自己写到url里,尽量记住常用的搜索参数,对照solrJ的写法 SolrQuery parameters

JavaScript高级程序设计学习笔记第二章

1.向 HTML 页面中插入 JavaScript 的主要方法,就是使用<script>元素 2.HTML 4.01中定义了<script>元素的六个属性(方便记忆,可将6个属性分为3组) 第一组: async:可选.表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本.只对外部脚本文件有效.(使用<script>不属于外部脚本) defer:可选.表示脚本可以立即下载,但是延迟到文档完全被解析和显示之后再执行.只对外部脚本文件有效. 第

《spring实战》学习笔记-第二章:装配bean

2.1 Spring配置的可选方案 当描述bean如何进行装配时,Spring具有非常大的灵活性,它提供了三种主要的装配机制: (1)在XML中进行显式配置. (2)在Java中进行显式配置. (3)隐式的bean发现机制和自动装配. 建议是尽可能地使用自动配置的机制.显式配置越少越好.当你必须要显式配置bean的时候(比如,有些源码不是由你来维护的,而当你需要为这些代码配置bean的时候),我推荐使用类型安全并且比XML更加强大的JavaConfig.最后,只有当你想要使用便利的XML命名空间