`

python链接mysql常见问题汇总

阅读更多
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
分享到:
评论

相关推荐

    Python 3 极简教程.pdf

    - **连接MySQL数据库**:使用Python库如`mysql-connector-python`建立连接。 - **执行SQL查询**:增删改查等基本操作。 #### 十三、Web框架Flask - **Flask简介**:轻量级Web应用框架。 - **搭建Web应用**:创建...

    后端面试题汇总(Python、Redis、MySQL、PostgreSQL、Kafka、数据结构、算法、编程、网络).zip

    在IT领域,尤其是在后端开发的面试过程中,数据结构是不可或缺的重要知识...所以,如果你正在准备后端开发的面试,这份包含Python、Redis、MySQL、PostgreSQL、Kafka以及数据结构的综合面试题资料将是极好的学习资源。

    推荐一些学习MySQL的资源

    4. MySQL学习资源汇总(知乎):这个资源汇总了学习 MySQL 的各种资源,包括视频教程、书籍、在线课程等。 5. MySQL 学习视频(Bilibili):这个视频教程涵盖了 MySQL 的所有方面,非常适合初学者。 6. MySQL学习群...

    常用python编程模板汇总

    Python中可以使用`MySQLdb`库来连接MySQL数据库: 1. 连接数据库: ```python import MySQLdb DB_URL = 'localhost' USER_NAME = 'root' PASSWD = '1234' DB_NAME = 'test' db = MySQLdb.connect(DB_URL, ...

    leetcode算法题主函数如何写-myinterview:记录我的面试过程,技术栈:python、golang、MySQL、redis、大数

    面试中常见的问题汇总: 自我介绍; 你对加班的看法? 你对薪资的要求? 为什么要离职? python面试题 golang面试题 go的调度; go struct能不能比较; go defer的特性; select可以用于什么,常用语gorotine的完美...

    KMP算法python代码实现与使用场景.docx

    根据给定文件的信息,本文将深入探讨KMP算法的核心概念、Python实现以及适用场景,并简要提及MySQL查询语句的相关内容。 ### KMP算法概述 KMP算法(Knuth-Morris-Pratt Algorithm)是一种高效的字符串搜索算法,由...

    互联网面试基本问题汇总.pdf

    以下是一些常见的问题和相关解答,涵盖了数据开发、数据库、网络协议、编程语言等多个领域: 1. **MySQL与MongoDB的区别**: MySQL是关系型数据库,支持SQL查询,适合处理结构化的数据,有良好的事务处理能力;而...

    浙江从泰.pdf_python面试

    - **数据汇总**:Slave爬取的数据最终存储在MongoDB或MySQL等数据库中,而非Redis,以便于数据管理和分析。 - **移植性**:Slave程序可以在多台机器上运行,只需配置正确的Master地址和数据库连接信息。 理解并掌握...

    面试大数据岗位 spark相关问题汇总

    - 如果是通过数据库连接,可以在连接字符串中添加`serverTimezone`参数,如`dbConn="jdbc:mysql://101.200.230.0:3328/bigdata_bi_customer?serverTimezone=Asia/Shanghai"`。 **4.2 JDBC驱动加载失败** - **问题...

    知名公司笔试题汇总.docx

    ### IT知识点汇总 #### 数据分析与编程基础 1. **数据之间的关系和特征**: - 数据之间的关系指的是数据集内部各个变量之间的关联性。这种关联性可以通过统计方法(如相关系数)或可视化手段(如散点图)来发现。...

    python实现的生成word文档功能示例

    通过编写一个Python脚本,可以实现自动汇总费用信息,并生成包含明细的Word文档。这样的自动化不仅可以大幅减少手工制作文档的繁琐和错误,还可以提高工作效率。 具体来说,本示例使用了Python中的几个重要模块:`...

    BAT面试题汇总及详解(进大厂必看)

    熟悉MySQL、Oracle、MongoDB等主流数据库系统,理解ACID特性,以及NoSQL与关系型数据库的优缺点,都是面试中的常见考点。 **五、编程语言** 面试中,面试官会根据应聘者的专业背景询问特定编程语言的细节,如C++的...

    合并显示两个数据表的记录数据

    - **全外连接**(在MySQL中不支持,但在其他数据库系统如PostgreSQL中可用): ```sql SELECT * FROM table1 FULL OUTER JOIN table2 ON table1.key = table2.key; ``` ### 4. 数据预处理 在合并数据表之前,可能...

    自己动手写网络爬虫

    #### 知识点六:常见问题及解决方案 - **反爬虫策略**:网站通常会采取限制IP访问频率、验证码等方式防止爬虫。应对策略包括使用代理IP池、模拟真实用户行为等。 - **数据清洗**:爬取的数据可能存在格式不一致、...

    八大编程语言知识点汇总.zip

    它涵盖的知识点有变量、常量、数据类型、流程控制(条件语句、循环)、函数、数组、文件操作、MySQL数据库连接和查询、会话管理以及面向对象编程。 7. **Python**:Python是一门简洁易读的高级编程语言,适合初学者...

    设计.zip

    9. 数据库交互:Python的数据库接口如pymysql、psycopg2等,能方便地连接和操作MySQL、PostgreSQL等关系型数据库,或者使用pandas的`read_sql_query()`和`to_sql()`函数直接进行SQL查询和数据写入。 10. 自动化报告...

    从数据库拿数据存Excel表

    在IT行业中,将数据从数据库导出并存储到Excel表格是一项常见的任务,尤其在数据分析、报表制作和数据共享等场景中。以下是对这个主题的详细解释: 首先,我们需要理解数据库和Excel之间的基本概念。数据库是一种...

Global site tag (gtag.js) - Google Analytics