`
xiaobian
  • 浏览: 589163 次
  • 来自: 北京
社区版块
存档分类
最新评论

Python 数据库开发

阅读更多
Python数据库操作。

Python与Mysql

一、安装MySQLdb模块
使用python连接Mysql的前提,就是需要一个让python连接到Mysql的接口,这就是MySQLdb模块。

验证是否已经安装了MySQLdb:

==========================================================
d:\usr\local\Python25>python
Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] onwin32
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named MySQLdb
==========================================================
如果有类似于上面的"No module named MySQLdb",表明MySQLdb尚未安装或安装的不成功!

MySQL 版本:5.0.67
下载地址:http://dev.mysql.com/downloads/mysql/5.0.html#downloads
下载exe文件并安装

==========================================================

Python 版本:2.5
下载地址:http://www.python.org/download/releases/2.5.4/
下载msi文件并安装

MySQLdb版本: MySQLdb Windows binary for Python 2.5
下载地址:http://biohackers.net/wikiattach/Python2(2e)5/attachments/MySQL-python.exe-1.2.1_p2.win32-py2.5.exe
参见:http://forums.mysql.com/read.php?50,129618,140611#msg-140611

常见问题:
1.无法定位程序输入点 mysql_server_init 于动态链接库 LIBMYSQL.dll 上。
----------------------------------------------------------------------------------------------------
D:\usr\local\Python25>python
Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\usr\local\Python25\Lib\site-packages\MySQLdb\__init__.py", line 19, in <module>
    import _mysql
ImportError: DLL load failed: 找不到指定的程序。
----------------------------------------------------------------------------------------------------
解决方法:把mysql安装目录的bin\libmySQL.dll文件复制到python安装目录的Lib\site-packages下

==========================================================

Python 版本:2.6
下载地址:http://www.python.org/download/releases/2.6.1/
下载msi文件并安装

MySQLdb版本: MySQL-python-1.2.2.win32-py2.6.exe
下载地址:http://home.netimperia.com/files/misc/MySQL-python-1.2.2.win32-py2.6.exe
参见:http://sourceforge.net/forum/forum.php?thread_id=2316047&forum_id=70460

常见问题:
1.ImportError: DLL load failed: 找不到指定的模块。
----------------------------------------------------------------------------------------------------
D:\usr\local\Python26>python
Python 2.6 (r26:66721, Oct  2 2008, 11:35:03) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\usr\local\Python26\Lib\site-packages\MySQLdb\__init__.py", line 19, in <module>

    import _mysql
ImportError: DLL load failed: 找不到指定的模块。
----------------------------------------------------------------------------------------------------
解决方法:下载libmmd.dll(附件)和libguide40.dll(附件)两个dll文件并复制System32目录之下
参见:http://sourceforge.net/forum/message.php?msg_id=5613887

2.ImportError: DLL load failed: 找不到指定的模块。
----------------------------------------------------------------------------------------------------
D:\usr\local\Python26>python
Python 2.6 (r26:66721, Oct  2 2008, 11:35:03) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
D:\usr\local\Python26\lib\site-packages\MySQLdb\__init__.py:34: DeprecationWarning: the sets module is deprecated
  from sets import ImmutableSet
----------------------------------------------------------------------------------------------------
解决方法:
1) 在文件中 "__init__", 注释掉:
from sets import ImmutableSet 
class DBAPISet(ImmutableSet): 
新增:
class DBAPISet(frozenset)

2) 在文件中"converters.py", 注释掉  from sets import BaseSet, Set 这一句话。

3) 在文件中"converters.py", 修改 "Set" 成为 "set" ( 只有两个地方需要修改):
大概 line 48: return Set([ i for i in s.split(',') if i ]) 》》 return set([ i for i in s.split(',') if i ])
大概 line 128: Set: Set2Str, 》》 set: Set2Str
参见:http://sourceforge.net/forum/message.php?msg_id=5808948


二、MySQLdb的使用。

引入我们需要的包
import MySQLdb

1.和数据库建立连接
conn=MySQLdb.connect(host="localhost",user="root",passwd="sa",db="mytable")
提供的connect方法用来和数据库建立连接,接收数个参数,返回连接对象.

比较常用的参数包括
host:数据库主机名.默认是用本地主机.
user:数据库登陆名.默认是当前用户.
passwd:数据库登陆的秘密.默认为空.
db:要使用的数据库名.没有默认值.
port:MySQL服务使用的TCP端口.默认是3306.
conn连接有两个重要的方法commit【提交新增和修改】,rollback【撤销新增或修改】

2.执行SQL语句获取返回值
//获取连接的游标
cursor=conn.cursor()
//查询
sql = "select * from 【table】"
//新增
sql = "insert into 【table】(字段,字段) values(值,值)"
//修改
sql = "update 【table】 set 字段 =‘值’where 条件 "
//删除
sql = "delete from 【table】 where 条件"
cursor.execute(sql)

返回值
cur.execute('select * from tables')
其返回值为SQL语句得到的行数,如:2L,表示2行。
然后,可以从该对象的fetchone或fetchall方法得到行信息。

获取行信息
指针对象的fetchone()方法,是每次得到一行的tuple返回值:
引用
>>> row=cur.fetchone()
>>> print row
('user1', '52c69e3a57331081823331c4e69d3f2e', 1000L, 1000L, '/home/FTP/user1', '')

指针对象的fetchall()方法,是得到一组tuple,其内容为由行信息组成的tuple值:
引用
>>> cur.scroll(0,'absolute')
>>> row=cur.fetchall()
>>> print row
(('user1', '52c69e3a57331081823331c4e69d3f2e', 1000L, 1000L, '/home/FTP/user1', ''), ('user2', '7e58d63b60197ceb55a1c487989a3720', 1000L, 1000L, '/home/FTP/user2', None))

移动指针
当使用fetchone()方法是,指针是会发生移动的。所以,若不重置指针,那么使用fetchall的信息将只会包含指针后面的行内容。
手动移动指针使用:
cur.scroll(int,parm)

含义为:
引用
int:移动的行数,整数;在相对模式下,正数向下移动,负值表示向上移动。
parm:移动的模式,默认是relative,相对模式;可接受absoulte,绝对模式。

修改数据
修改数据,包括插入、更新、删除。它们都是使用指针对象的execute()方法执行:
cur.execute("insert  into table (row1, row2) values ('111', '222')")
cur.execute("update  table set   row1 = 'test'  where  row2 = 'row2' ")
cur.execute("delete from  table  where row1 = 'row1' ")

因单引号“'”用于SQL语句中的标识,所以,python中的字符串需使用双引号括住。
此外,也可以使用python的“格式化字符串”写法,简化命令,例如:
cur.execute("update  table set   row1 = '%s'  where  row2 = '%s' " %('value1','value2'))

※请注意,'%s'的单引号是SQL语句的间隔符,'value1'的单引号是python的字符串间隔符,其含义是不同的。是否需要间隔符,以及使用双引号还是单引号作为间隔,需根据其含义决定。例如,还有:
cur.execute("update FTPUSERS set passwd=%s where userid='%s' " %("md5('123')",'user2'))

这里,paswd=%s是因SQL的md5()函数是不需要单引号间隔的;"md5('123')"是python的字符串中含有单引号,所以用双引号括住。

提交修改
一般情况下,MySQLdb模块会自动提交修改。但我们在更新数据后,手动运行一次:
conn.commit()

关闭数据库连接
需要分别的关闭指针对象和连接对象.他们有名字相同的方法
cursor.close()
conn.close()


参考链接:
http://www.cnblogs.com/sislcb/archive/2008/11/24/1339913.html
http://www.linuxfly.org/post/180/
http://www.3gmatrix.cn/4/viewspace-16757.html
分享到:
评论
2 楼 phlsbg 2009-08-15  
2.6上遇到这些问题了
1 楼 phlsbg 2009-08-15  
用2.6确实遇到这些问题
python的第三方库什么时候能到3.0呀

相关推荐

    pythonGUI与数据库开发教程

    **Python GUI与数据库开发教程** 本教程主要涵盖了Python在图形用户界面(GUI)开发和数据库交互方面的知识。通过51页的PPT讲解和8个完整的源码示例,为初学者提供了深入学习的资源。Python GUI允许开发者创建直观...

    Python 数据库对比工具脚本

    1、对比两个数据库的表结构差异 2、对比两个数据库的表字段差异 3、可全部导出或者选择其中一种比较方式

    Python数据库操作函数

    Python数据库操作函数,直接将数据库操作封装为函数,可直接调用。

    Python-SQLcrush一个基于控制台的数据库编辑器

    Python是一种广泛使用的编程语言,尤其在数据处理和Web开发领域,...通过深入学习和实践,开发者不仅能掌握SQLcrush的使用,还能进一步提升自己的Python数据库开发技能,为未来应对更复杂的数据管理任务打下坚实基础。

    精选_基于Python的数据库实现_源码打包

    在IT领域,数据库管理系统是至关重要的工具,它们用于存储、管理、检索和更新数据。而Python作为一种强大且易学...通过深入研究这些源代码,你可以提升自己在Python数据库开发方面的技能,更好地理解和应用数据库技术。

    Python开发课程设计高校教务系统源代码+数据库.zip

    Python开发课程设计高校教务系统源代码+数据库Python开发课程设计高校教务系统源代码+数据库Python开发课程设计高校教务系统源代码+数据库Python开发课程设计高校教务系统源代码+数据库Python开发课程设计高校教务...

    Aestate Framework 是一款基于Python语言开发的ORM框架,为Python提供数据库多样化操作的ORM工具包

    了解了Aestate Framework的基本概念和功能后,开发者可以更高效地进行Python数据库开发,减少与SQL语句的直接交互,专注于业务逻辑。在项目中结合Aestate的使用,不仅可以提升开发速度,还能提高代码的可维护性和...

    Python库 | notion_database-20210513.4-py3-none-any.whl

    Python数据库库通常是用来连接、查询和操作各种类型数据库的工具,例如MySQL、PostgreSQL、SQLite等。`notion_database`可能提供了类似的API,使得开发者可以轻松地在Python应用中创建、读取、更新和删除Notion中的...

    python 连接达梦数据库

    Python 连接达梦数据库可以用于各种应用程序,例如,使用 Django 进行网站开发,使用 Python 做后端。可以通过查看达梦数据库的文档和社区支持来获取更多信息。 Python 连接达梦数据库需要按照一定的步骤进行,...

    python实现连接数据库账号注册和登录

    1. Python数据库连接:使用Python数据库接口库连接和操作数据库。 2. 用户注册和登录:处理用户信息的增删改查,尤其是密码的安全存储。 3. 哈希算法:用于密码的加密存储,提供不可逆的密码验证方式。 4. 网络编程...

    python数据库操作

    python数据库操作,适合嵌入式开发,方便简单。

    python实现数据库编程

    ### Python 实现数据库编程 在本篇文章中,我们将探讨如何使用 Python 进行数据库编程,主要聚焦于如何连接和操作数据库。Python 是一种强大的高级编程语言,在数据处理、Web 开发等多个领域都有着广泛的应用。而...

    Python数据库模块

    在实际开发中,数据库操作的安全性是关键,因此使用预编译语句(参数化查询)来防止SQL注入攻击是必要的。此外,良好的错误处理和事务管理也是提高程序健壮性的关键,比如使用`try-except-finally`语句处理异常,...

    python操作mysql数据库.pdf

    Python DB-API是Python中...了解和掌握Python DB-API以及像MySQLdb这样的数据库接口,对于进行Python数据库开发来说至关重要。通过这些工具,开发者可以轻松地实现复杂的数据操作,从而提高工作效率并简化项目维护。

    用于做python数据库实验的营养数据源

    标题中的“用于做python数据库实验的营养数据源”指出,这是一个专门为Python数据库操作设计的数据集,主要用于教学和实验目的。在Python编程中,数据库交互是一个重要的部分,它涉及到如何存储、检索和处理数据。...

    sql_CONNECT.zip_MYSQL_mysql python_python sql_python 数据库_python数

    接下来,我们看看标签:"mysql mysql_python python_sql python_数据库 python数据库"。这些标签进一步强调了Python与MySQL数据库之间的接口,以及Python在处理SQL和数据库方面的能力。 在提供的压缩包子文件"sql_...

    python数据库课程.7z

    Python数据库课程是一个深入探讨如何使用Python与各种数据库进行交互的学习资源。这个压缩包包含了多个Python脚本文件,每个文件都专注于不同的数据库操作或特定的Python技术。以下是对这些文件所代表的知识点的详细...

    Python库 | porter-db-0.0.6.tar.gz

    结合标签"python 数据库 开发语言 后端 database",我们可以推断porter-db是一个用于后端开发的Python数据库接口,它可能提供了连接、查询和操作数据库的能力。在Python中,常见的数据库库有SQLite、MySQLdb(用于...

Global site tag (gtag.js) - Google Analytics