python操作mysql数据库
Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。
DB-API 是一个规范. 它定义了一系列必须的对象和数据库存取方式, 以便为各种各样的底层数据库系统和多种多样的数据库接口程序提供一致的访问接口 。
Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同的方式操作各数据库。
Python DB-API使用流程:
- 引入 API 模块。
- 获取与数据库的连接。
- 执行SQL语句和存储过程。
- 关闭数据库连接。
什么是MySQLdb?
MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的。
如何安装MySQLdb?
为了用DB-API编写MySQL脚本,必须确保已经安装了MySQL。
执行事务
事务机制可以确保数据一致性。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
- 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
- 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
- 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
- 持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。
数据库连接
连接数据库前,请先确认以下事项:
- 您已经创建了数据库 TESTDB.
- 在TESTDB数据库中您已经创建了表 EMPLOYEE
- EMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。
- 连接数据库TESTDB使用的用户名为 "testuser" ,密码为 "test123",你可以可以自己设定或者直接使用root用户名及其密码,Mysql数据库用户授权请使用Grant命令。
- 在你的机子上已经安装了 Python MySQLdb 模块。
连接时始终出现问题:
_mysql_exceptions.OperationalError: (2013, "Lost connection to MySQL server at 'waiting for initial communication packet', system error: 0")
针对次问题也修改过ini配置文件,但是还是没有解决问题,有待进一步解决。。。。
# coding: utf-8 # import sqlite3 # conn = sqlite3.connect('test.db') # cursor = conn.cursor() # # sqlite创建表时,若id为INTEGER类型且为主键,可以自动递增,在插入数据时id填NULL即可 # # cursor.execute('create table user(id integer primary key, name varchar(25))') #执行一次 # # 插入一条数据 # cursor.execute('insert into user(id,name)values(NULL,"yjc")') # # 返回影响的行数 # print(cursor.rowcount) # #提交事务,否则上述SQL不会提交执行 # conn.commit() # # 执行查询 # cursor.execute('select * from user') # # 获取查询结果 # print(cursor.fetchall()) # # 关闭游标和连接 # cursor.close() # conn.close() import MySQLdb #from MySQLdb import connect # print MySQLdb # #打开数据库连接 # db=MySQLdb.connect( host='localhost', user='root',passwd='ranjiewen',db='testdb',port=3306) # # 使用cursor()方法获取操作游标 # cursor = db.cursor() # # 使用execute方法执行SQL语句 # cursor.execute("SELECT VERSION()") # # 使用 fetchone() 方法获取一条数据库。 # data = cursor.fetchone() # print "Database version : %s " % data # # 关闭数据库连接 # db.close() # 打开数据库连接 db = MySQLdb.connect("localhost","testuser","testuser","testdb" ) # 使用cursor()方法获取操作游标 cursor = db.cursor() # 如果数据表已经存在使用 execute() 方法删除表。 cursor.execute("DROP TABLE IF EXISTS EMPLOYEE") # 创建数据表SQL语句 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()