Python操作mysql

一、MySQLdb包的安装
1. 在win环境下,下载MySQL-Python-1.2.3,有两种方式:
(1) 下载src源码.tar.gz(这个源码需要build编译再安装.egg包(当于.jar包));
不过这种方法之后需要修改环境变量和MySQLdb.conf文件夹里的配置文件等等,具体网上去搜对应版本,我用的第二种方法,在python命令行里直接import MySQLdb;没有出现任何问题。
(2) 直接下载MySQL-python-1.2.3.exe安装包(双击直接安装);
这里直接安装的.exe,在python命令行里import没问题,在PyCharm里import没问题,但在pydev里引入就提示”uncheck package”,估计是pydev这个插件本身就有一些不完善的功能,要不就是最容易忽略的错误:忘记设置环境变量或者环境变量设置的路径错误。
2. 解决eclipse里pydev插件不能引入MySQLdb包的问题:强制编译,而不仅是要在构建路径里引入库文件、.egg包(当于.jar包)等
解决方案:
Eclipse中,windows==>preference==>Pydev中,配置Interpreter-Python的ForcedBuiltins选项卡内容,手动添加内容MySQLdb,将模块强制编译进去。
如果仅操作"构建路径System PYTHONPATH"的内容,引入库文件,无论如何不会解决问题。一定要强制编译进去!!!
 
二、连接数据库
python连接mysql主要用到了游标cursor来访问,这个是MySQLdb自带的。
补充几个对象的方法和属性:
1.connection的参数:conn=MySQLdb.connect(“localhost”, “root”, “123456”, “testdb”)
                 亦作conn = MySQLdb.connect(host=’localhost’,user=’root’, passwd=’123456’, db=’testdb’)
注意这里没有写明端口号port=3306,是因为MySQLdb默认端口号为3306,不用指定,如果你自己改了,就要写上。
connection的参数:
host,连接的数据库服务器主机名,默认为本地主机(localhost)。
user,连接数据库的用户名,默认为当前用户。
passwd,连接密码,没有默认值。
db,连接的数据库名,没有默认值。
port,指定数据库服务器的连接端口,默认是3306
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。
 
2.connection(连接)对象
 方法名                     作用
conn. close()                  关闭数据库
conn.commit()                提交当前事务
----- 必须sql写完后要提交commit(),尤其是insert, update, delete时,否则数据库没有变化!!! 
----- 而像select这种普通的查询,不涉及修改数据库的,是否commit()没有关系
conn.rollback()              取消当前事务
   ---- 异常处理except Exception:里最好还是加上回滚rollback()
conn.cursor()           获取当前连接的游标对象
conn.rrorhandler(cxn,cur,errcls,errval)  作为已给游标的句柄
 
3.cursor游标对象属性及方法
(1) cursor执行命令的方法
callproc(sql, procname, args)    执行存储过程,接收参数为存储过程名和参数列表,返回值为受影响的行数
execute(sql,param, args)     执行单条sql语句,接收参数param,返回值为args受影响的行数
executemany(sql,param, args)  执行多条sql语句,接收参数param,返回值为args受影响的行数
next()            使用迭代对象得到结果的下一行
nextset() / nestset(self):    移动到下一个结果集(如果支持的话)
close()           关闭游标
connection       创建此游标的连接(可选)

(2) cursor用来接收返回值的方法
fetchone()        返回一条结果行
fetchall(self)        匹配所有剩余结果
fetchmany(size-cursor,arraysize)  匹配结果的下几行
rowcount         读取数据库表中的行数,最后一次execute()返回或影响的行数
scroll(self, value, mode=’relative’):移动指针到某一行。如果mode=’relative’,则表示从当前所在行移动value条,如果mode=’absolute’,则表示从结果集的第一行移动value条
arraysize        使用fetchmany()方法时一次取出的记录数,默认为1
discription      返回游标的活动状态,包括(7元素):
(name,type_code,display_size,internal_size,precision,scale,null_ok)其中name, type_code是必须的。
lastrowid        返回最后更新行的ID(可选),如果数据库不支持,返回None
__iter__()        创建迭代对象(可选,参考next())
messages          游标执行好数据库返回的信息列表(元组集合)
rownumber         当前结果集中游标的索引(从0行开始)
setinput-size(sizes)   设置输入最大值
setoutput-size(sizes[,col])  设置列输出的缓冲值
 
三、代码
(1) mysql_1.py
[python] view plain copy
import MySQLdb  
  
try:  
    conn = MySQLdb.connect(host='localhost', user='root', passwd='mysql', db='testdb') # 默认port可以不写3306  
    cursor = conn.cursor()  
    sql = "insert into table1 values('105', 'tomy', 23, 'm', 'U.KK.')"  
    cursor.execute(sql)  
    conn.commit()    #提交事务commit()  
    cursor.execute("select * from table1")  
    results = cursor.fetchall()  
    for re in results:  
        print re  
    cursor.close()  
    conn.close()  
except MySQLdb.Error, e:  
    conn.rollback()   #回滚rollback()  
    print "MySQL Error %d: %s" % (e.args[0], e.args[1])  
print e  

(2) mysql_2.py
[python] view plain copy
# -*-encoding: utf-8 -*-  
import os  
import string  
import sys  
import MySQLdb  
  
# 连接数据库  
try:     
    conn = MySQLdb.connect(host='localhost',port=3306, user='root', passwd='mysql', db='testdb')  
except Exception, e:  
    print e  
    sys.exit()  
  
# 获取cursor游标对象来进行操作  
cursor = conn.cursor()  
  
# 创建表  
sql = "create table if not exists test1(name varchar(128) primary key, age int(4))"  
cursor.execute(sql)  
print "success create table test1!"  
  
# 插入数据  
sql = "insert into test1(name, age) values('%s', '%d')" % ("denny", 23)  
try:  
    cursor.execute(sql)  
    conn.commit()  #凡是insert,update,delete都要"提交事务commit()",否则数据库不会改变  
    print "succeess insert a record!"  
except Exception, e:  
    conn.rollback()  #异常必须回滚rollback()  
    print e  
# 插入多条数据  
sql = "insert into test1(name, age) values (%s, %s)"  
param = (("tom", 24), ("alice", 25), ("bob", "26"))  
try:  
    cursor.executemany(sql, param) #批量插入数据时必须用.executemany(sql)而不是.execute(sql),那是单条数据  
    conn.commit()  
    print "success insert many records!"  
except Exception, e:  
    conn.rollback()  
    print e  
  
# 查询出数据  
sql = "select * from test1"  
cursor.execute(sql)  
alldata = cursor.fetchall()  
# 如果有数据返回就循环输出,alldata是个二维列表)  
if alldata:  
    for rec in alldata:  
        print rec[0], rec[1]  # 分别输出,结果为denny 23  
        # print rec    # 也可以直接输出rec,不带下标rec[i], 结果为('denny', 23L)  
  
# 关闭连接  
cursor.close()  
conn.close()  

控制台输出结果:


SQL表结果:


(3) mysql_3.py (fetchone()示例)
[python] view plain copy
import MySQLdb  
  
db = MySQLdb.connect("localhost", "root", "mysql", "testdb" )  
cursor = db.cursor()  
cursor.execute("select * from test1")  
data = cursor.fetchone()  
while data!=None:  
    print data[1]  
    data = cursor.fetchone()  
db.close  

(4) mysql_4.py(fetchall()示例)
[python] view plain copy
import MySQLdb  
  
db = MySQLdb.connect("localhost", "root", "mysql", "testdb" )  
cursor = db.cursor()  
cursor.execute("select * from test1")  
datas = cursor.fetchall()  
for data in datas:  
    print data[1]  
print cursor.rowcount,"rows in tatal"  
db.close  


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python可以使用多种库来操作MySQL数据库,其中包括PyMySQLmysqlclient。PyMySQL是一个纯Python编写的库,安装非常简单,而mysqlclient是底层使用C编写的库,安装可能会有一些问题。\[3\]你可以根据自己的需求选择其中之一进行安装和使用。 在使用PyMySQL库时,你可以使用%s作为参数占位符来执行SQL操作,这与Python自带的sqlite3模块的占位符问号(?)有所不同。如果需要更详细的文档,你可以参考PyMySQL的官方文档。\[2\] 如果你想了解更多关于Python操作MySQL的知识,可以参考一些专门的章节或教程,这些资源会更详细地介绍如何使用Python来进行MySQL数据库操作。\[1\]希望这些信息对你有所帮助! #### 引用[.reference_title] - *1* [Python操作MySQL](https://blog.csdn.net/sanylove/article/details/124166373)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [太全了——用Python操作MySQL的使用教程集锦](https://blog.csdn.net/m0_59485658/article/details/126364328)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Python操作MySql](https://blog.csdn.net/PAN_BING/article/details/120812542)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值