您的位置:首页 > 编程语言 > Python开发

python 连接mysql数据建立表并插入数据详解

2013-01-13 17:54 1156 查看
python 连接mysql数据建立表并插入数据详解,夜行者基地原创...转载请保留原创链接

http://www.scpman.com/forum.php?mod=viewthread&tid=144&page=1&extra=#pid218

红色表示报错信息

黑色是解说

绿色是解决方法


1、要想用python连接mysql首先要有mysql模块!



>>> import MySQLdb

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

ImportError: No module named MySQLdb

>>>

很明显这个模块当前安装的python 中没有

没有安装MySQLdb,去安装下

http://mysql-python.sourceforge.net/ 官方网站

http://sourceforge.net/projects/mysql-python/files/ 这里可以直接下到相关的文件

http://jaist.dl.sourceforge.net/project/mysql-python/mysql-python-test/1.2.4b3/MySQL-python-1.2.4b3.win32-py2.7.exe

2、模块安装好后,就开始连接数据

本地环境中安装了一个mysql,用户名root 密码123456

我们写段代码测试下

#! /usr/bin/env python

#coding=utf-8

#夜行者基地:http://www.scpman.com

#夜行者基地交流1群:119848305

import os, sys, string

import MySQLdb

con=MySQLdb.connect(host='localhost',user='root',passwd='123456',db='test')

if con:

print 'ok'

运行之:

> "C:\Python27\python.exe" -u "C:\Users\Administrator\Desktop\mysql.py"

ok #连接成功,说明可用

我故意把root写成root1

return Connection(*args, **kwargs)

File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 187, in __init__

super(Connection, self).__init__(*args, **kwargs2)

_mysql_exceptions.OperationalError: (1045, "Access denied for user 'root1'@'localhost' (using password: YES)")

有报错说明,这段代码是正常的

3、用python连接数据库建立一张数据库表,插入数据,并显示出来

#! /usr/bin/env python

#coding=utf-8

#夜行者基地:http://www.scpman.com

#夜行者基地交流1群:119848305

import os, sys, string

import MySQLdb

con=MySQLdb.connect(host='localhost',user='root',passwd='123456',db='test') #@1

cursor = con.cursor()

sql="""CREATE TABLE IF NOT student ( SNO int(11) NOT NULL auto_increment,

SNAME char(8) NOT NULL, SEX char(2) default NULL, DEPINO int(11) default NULL,

PRIMARY KEY (SNO), UNIQUE KEY SNAME (SNAME)) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

""" #@2

#cursor.execute(sql)

sql2="insert into STUDENT(SNAME,SEX,DEPINO)values('AA','M',13);insert into STUDENT(SNAME,SEX,DEPINO)values('BB','G',16);"#@3

sql3="select * from STUDENT;"#@4

cursor.execute(sql2)

cursor.execute(sql3)

alldata = cursor.fetchall()#@5

print " SNO SNAME SEX DEPINO" #@6

if alldata:

for rec in alldata:

print "%5s %5s %5s %5s"%(rec[0],rec[1],rec[2],rec[3]) #@7

cursor.close() #@8

con.close()

说明:

#@1 定义Host username passwd dbname

模块功能:connect()方法

* connect()方法用于连接数据库,返回一个数据库连接对象。如果要连接一个位于host.remote.com服务器上名为fourm的MySQL数据库,连接串可以这样写:

db = MySQLdb.connect(host="remote.com",user="user",passwd="xxx",db="fourm" )


connect()的参数列表如下:

host,连接的数据库服务器主机名,默认为本地主机(localhost)。

user,连接数据库的用户名,默认为当前用户。

passwd,连接密码,没有默认值。

db,连接的数据库名,没有默认值。

conv,将文字映射到Python类型的字典。默认为MySQLdb.converters.conversions

cursorclass,cursor()使用的种类,默认值为MySQLdb.cursors.Cursor。

compress,启用协议压缩功能。

named_pipe,在windows中,与一个命名管道相连接。

init_command,一旦连接建立,就为数据库服务器指定一条语句来运行。

read_default_file,使用指定的MySQL配置文件。

read_default_group,读取的默认组。

unix_socket,在unix中,连接使用的套接字,默认使用TCP。

port,指定数据库服务器的连接端口,默认是3306。

#@2 一段sql用来建立一张student表共有SNO SNMAE SEX DEPINO 4个字段

#@3 这是两条sql是用来在student表中插入AA BB两个学生的信息

#@4 查询student表中的所有数据

#@5 cursor.fetchall()

*指针对象的cursor.fetchall()可取出指针结果集中的所有行,返回的结果集一个元组(tuples)。

其他相关:

*指针对象的cursor.execute(query[,parameters])方法执行数据库查询。

*指针对象的cursor.fetchall()可取出指针结果集中的所有行,返回的结果集一个元组(tuples)。

*指针对象的cursor.fetchmany([size=cursor.arraysize])从查询结果集中取出多行,我们可利用可选的参数指定取出的行数。

*指针对象的cursor.fetchone()从查询结果集中返回下一行。

*指针对象的cursor.arraysize属性指定由cursor.fetchmany()方法返回行的数目,影响fetchall()的性能,默认值为1。

*指针对象的cursor.rowcount属性指出上次查询或更新所发生行数。-1表示还没开始查询或没有查询到数据。

#@6 打印一个标题出来

#@7 将数据库查询出来的结果集循环输出

#@8 *指针对象的cursor.close()方法关闭指针并释放相关资源。

其他参考:* 连接对象的db.close()方法可关闭数据库连接,并释放相关资源。

* 连接对象的db.cursor([cursorClass])方法返回一个指针对象,用于访问和操作数据库中的数据。

* 连接对象的db.begin()方法用于开始一个事务,如果数据库的AUTOCOMMIT已经开启就关闭它,直到事务调用commit()和rollback()结束。

*连接对象的db.commit()和db.rollback()方法分别表示事务提交和回退。

python 连接mysql数据建立表并插入数据详解,夜行者基地原创...转载请保留原创链接

http://www.scpman.com/forum.php?mod=viewthread&tid=144&page=1&extra=#pid218

红色表示报错信息

黑色是解说

绿色是解决方法


本文出自 “90后运维博客” 博客,请务必保留此出处http://scpman.blog.51cto.com/5060169/1117477
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: