本文实例讲述了Python *** 作MysqL数据库。分享给大家供大家参考,具体如下:
1、安装通过Python连接MysqL数据库有很多库,这里使用官方推荐的MysqL Connector/Python库,其官网为:https://dev.mysql.com/doc/connector-python/en/。
通过pip命令安装:
pip install mysql-connector-python
默认安装的是最新的版本,我安装的是8.0.17,对应MysqL的8.0版本。MysqL统一了其相关工具的大版本号,必须相同或更高才可以兼容。例如我使用的是MysqL8.0,如果使用低于8的mysql-connector就会报错。事实上也是这样,在某些旧的文档中提示安装pip install mysql-connector,就会安装较低的版本,在连接MysqL时,会报错如下:
MysqL.connector.errors.NotSupportedError: Authentication plugin 'caching_sha2_password' is not supported
这是由于MysqL8.0使用了Use Strong Password Encryption for Authentication即强密码加密,而低版本的mysql-connector采用旧的MysqL_native_password加密方式,导致无法连接,因此注意使用和数据库相兼容的版本。
2、连接可以通过connector类的connect()方法进行数据库的连接,传入服务器、端口号、用户名、密码、数据库等参数,其中服务器与端口号可省略,默认为localhost:3306。
import MysqL.connectordb = MysqL.connector.connect( host='localhost',port='3306',user="root",password="123456",database="test")3、数据库、表 *** 作
对数据库、数据表的 *** 作属于模式定义语言(DDL),所有DDL语句的执行都是依赖于一个叫cursor的数据结构进行 *** 作的。通过从connect对象中获取cursor对象后就可以进行数据库、表的相关 *** 作了。例如创建一个数据库、数据表
# 获取数据库的cursorcursor = db.cursor()# 创建数据库cursor.execute("CREATE DATABASE mydatabase")# 创建数据表dbcursor.execute("CREATE table customers (name varchar(255),address varchar(255))")# 修改表 *** 作dbcursor.execute('ALTER table customers ADD ColUMN ID INT PRIMARY KEY auto_INCREMENT')# 查询并打印数据库中的所有表cursor.execute("show tables")for table in cursor: print(table)4、增删改
插入、删除、修改 *** 作依旧是通过cursor对象来实现,通过cursor的execute()方法执行sql *** 作,第一个参数是要执行的SQL语句,第二个参数是语句中要填充的变量。
在执行完所有的sql *** 作后记得要通过数据库对象的commit()将 *** 作事务提交到数据库,如果需要撤销则通过rollback()方法回滚 *** 作。
SQL语句中的变量可以用%s的形式作为占位符,然后再以python中元组的形式在执行时将变量填入,如下所示:
值得注意的是无论是什么类型的数据在传入时都被当做字符串类型,然后在执行sql *** 作时会将字符串转化为相应的类型,因此此处的占位符都是%s,而没有%d、%f等。
# 要执行的SQL语句sql = "INSERT INTO customers (name,address) VALUES (%s,%s)"# 以元组的形式填入数据val = ('Mike','Main street 20')# 执行 *** 作cursor.execute(sql,val)# 提交事务db.commit()
也可以用python中字典的形式填充变量,在SQL语句中的占位符需要使用对应的变量名
# 在SQL语句中指明变量名sql = "INSERT INTO customers (name,address) VALUES (%(name)s,%(address)s)"# 以字典的形式填入数据val = { 'name': 'Alice','address': 'Center street 22'}cursor.execute(sql,val)
如果需要一次插入多条数据,可以使用executemany()方法,将多条数据以数组的方式传给第二个参数。
通过cursor的rowcount属性可以返回成功 *** 作的数据条数,lastrowID属性是最后一个成功插入的行的ID
sql = "INSERT INTO customers (name,%s)"# 以数组的形式填充数据val = [ ('Peter','Lowstreet 4'),('Amy','Apple st 652'),('Hannah','Mountain 21'),]cursor.executemany(sql,val)print("成功插入%d条数据,最后一条的ID为:%d" % (cursor.rowcount,cursor.lastrowID))
修改、删除数据的方法与插入类似,只需要把对应的SQL语句和变量值传给execute()函数即可。可以看出mysql-connector库的 *** 作是非常贴近原生sql语言的。
# 修改数据sql = "UPDATE customers SET address=%s WHERE name=%s"val = ('Center street 21','Mike')cursor.execute(sql,val)# 删除数据sql = "DELETE FROM customers WHERE name=%s"val = ('Hannah',)cursor.execute(sql,val)5、查询
执行查询 *** 作和之前类似,都是通过execute()执行对应的SQL语句,在执行时将相应的数据填入即可。查询结束后,结果集会保存在cursor当中,可以直接把cursor当作迭代器iterator来进行展开取得结果集中每条数据的对应字段。也可以通过cursor的fetchall()、fetchone()方法取得所有或一条结果集。
# 查询customers表中ID介于6到8之间的数据并返回name、address字段query = "SELECT name,address FROM customers WHERE ID BETWEEN %s AND %s"cursor.execute(query,(6,8))# 循环取出结果集中的每条数据并打印for (name,address) in cursor: print("%s家的地址是%s" % (name,address))# 输出结果为:# Peter家的地址是Lowstreet 4# Amy家的地址是Apple st 652# Hannah家的地址是Mountain 21
通过原生的SQL语句可以进行更为复杂的查询 *** 作,例如通过where设置查询条件、Order by进行字段排序、limit设置返回结果条数、OFFSET查询结果集的偏移、Join进行表连接 *** 作
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python常见数据库 *** 作技巧汇总》、《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串 *** 作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录 *** 作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
总结以上是内存溢出为你收集整理的Python *** 作MySQL数据库实例详解【安装、连接、增删改查等】全部内容,希望文章能够帮你解决Python *** 作MySQL数据库实例详解【安装、连接、增删改查等】所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)