详解利用Python操作mysql数据库 朱雀 2020-09-05 16:06 904阅读 0赞 > **MySQL(官方发音是“My es-kew-el”,但很多人都说成“My Sequel”)是目前最受欢迎的开源关系型数据库管理系统。 一个开源项目具有如此之竞争力实在是令人意外,它的流行程度正在不断地接近另外两个闭源的商业数据库系统: 微软的 SQL Server 和甲骨文的Oracle 数据库(MySQL 在 2010 年被甲骨文收购)。它的流程程度实在是名符其实。对大多数应用来说, MySQL 都是不二选择。它是一种非常灵活、稳定、功能齐全的 DBMS, 许多顶级的网站都在用它: YouTube、 Twitter 和Facebook等。 > 因为它受众广泛, 免费,开箱即用,所以它也是网络数据采集项目中常用的数据库。** -------------------- # 1.与Python整合 # Python 没有内置的 MySQL 支持工具。不过,有很多开源的库可以用来与 MySQL 做交互,Python 2.x 和 Python 3.x 版本都支持。最有名的一个库就是 PyMySQL(https://github.com/PyMySQL/PyMySQL)。 **PyMySQL安装:** pip install pymysql **连接数据库:** 在进行本文以下内容之前需要注意: * 你有一个MySQL数据库,并且已经启动。 * 你有可以连接该数据库的用户名和密码 * 你有一个有权限操作的database 以下实例链接 Mysql 的 testdb(自己建的)数据库: import pymysql db = pymysql.connect(host='localhost',user='root',passwd='admin',db='testdb') cursor = db.cursor() cursor.execute("select version()") data = cursor.fetchone() print ("Database version : %s " % data) db.close() 执行以上脚本输出结果如下: Database version : ('5.6.41-log',) ## 创建数据库表 ## 如果数据库连接存在我们可以使用execute()方法来为数据库创建表,如下所示创建表EMPLOYEE: import pymysql # 打开数据库连接 db = pymysql.connect("localhost", "root", "admin", "testdb") # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() # 使用 execute() 方法执行 SQL,如果表存在则删除 cursor.execute("DROP TABLE IF EXISTS EMPLOYEE") # 使用预处理语句创建表 sql = """CREATE TABLE EMPLOYEE ( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT )""" cursor.execute(sql) # 关闭数据库连接 db.close() print("success") 成功创建employee表: ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1Zlcm1vbnRf_size_16_color_FFFFFF_t_70][] ## 数据库插入操作 ## 以下实例使用执行 SQL INSERT 语句向表 EMPLOYEE 插入记录: import pymysql # 打开数据库连接 db = pymysql.connect("localhost", "root", "admin", "testdb") # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() # 使用cursor()方法获取操作游标 cursor = db.cursor() # SQL 插入语句 sql = """INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Mac', 'Mohan', 20, 'M', 2000)""" try: # 执行sql语句 cursor.execute(sql) # 提交到数据库执行 db.commit() except: # 如果发生错误则回滚 db.rollback() # 关闭数据库连接 db.close() print("succcess") 以下代码使用变量向SQL语句中传递参数: > user_id = "test123" > password = "password" > > con.execute('insert into Login values( %s, %s)' % \ > (user_id, password)) ## 数据库查询操作 ## **查询单条数据** import pymysql # 打开数据库连接 db = pymysql.connect("localhost", "root", "admin", "testdb") # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() # 使用cursor()方法获取操作游标 cursor = db.cursor() # SQL 插入语句 sql = """select * from employee where age=20""" # 执行sql语句 cursor.execute(sql) # 提交到数据库执行 ret = cursor.fetchone() print(ret) cursor.close() # 关闭数据库连接 db.close() **查询多条数据** import pymysql # 打开数据库连接 db = pymysql.connect("localhost", "root", "admin", "testdb") # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() # 使用cursor()方法获取操作游标 cursor = db.cursor() # SQL 插入语句 sql = """select * from employee""" # 执行sql语句 cursor.execute(sql) # 提交到数据库执行 ret = cursor.fetchall() print(ret) cursor.close() # 关闭数据库连接 db.close() ## 修改数据库 ## import pymysql # 打开数据库连接 db = pymysql.connect("localhost", "root", "admin", "testdb") # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() # SQL 修改语句 sql = """update employee set age=%s where income=%s""" age = 22 income = 2001 try: # 执行sql语句 cursor.execute(sql,[age,income]) # 提交到数据库执行 db.commit() except: # 如果发生错误则回滚 db.rollback() cursor.close() # 关闭数据库连接 db.close() print("succcess") 结果如下: ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1Zlcm1vbnRf_size_16_color_FFFFFF_t_70 1][] ## 删除操作 ## 删除操作用于删除数据表中的数据,以下实例演示了删除数据表 EMPLOYEE 中 AGE 大于 21 的所有数据: import pymysql db = pymysql.connect(host='localhost',user='root',passwd='admin',db='testdb') # 使用cursor()方法获取操作游标 cursor = db.cursor() # SQL 删除语句 sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (21) try: # 执行SQL语句 cursor.execute(sql) # 提交修改 db.commit() except: # 发生错误时回滚 db.rollback() # 关闭连接 db.close() 对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。 commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1Zlcm1vbnRf_size_16_color_FFFFFF_t_70]: /images/1599321905519.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1Zlcm1vbnRf_size_16_color_FFFFFF_t_70 1]: /images/1599321889107.png
还没有评论,来说两句吧...