python如何操作数据库(如SQLite、MySQL)?
SQLite
SQLite的驱动内置在Python标准库中,所以我们可以直接来操作SQLite数据库。
使用Python的DB-API时,只要搞清楚Connection和Cursor对象,打开后一定记得关闭,就可以放心地使用。
使用Cursor对象执行insert,update,delete语句时,执行结果由 rowcount 返回影响的行数,就可以拿到执行结果。
使用Cursor对象执行select语句时,通过featchall()可以拿到结果集。结果集是一个list,每个元素都是一个tuple,对应一行记录。如果SQL语句带有参数,那么需要把参数按照位置传递给execute()方法,有几个“?”占位符就必须对应几个参数,例如:
cursor.execute('select * from user where id=?', '1')
cursor.execute("select * from user where id='1'")
cursor.execute('select * from user where id=/'1/'')
SQLite支持常见的标准SQL语句以及几种常见的数据类型。
mysql安装(所有文件已经上传百度云mysql目录)
1)安装mysql,文件:mysql-installer-community-5.6.24.02)安装python MySQL驱动,文件:mysql-connector-python-2.0.4-py2.7
3)安装SQLAlchemy,文件:SQLAlchemy.zip
- 安装ez_setup.py,文件ez_setup.py;python怎么使用ez_setup.py
- 解压到任一文件夹目录下,命令行下 切换到这一目录;
- 执行python set_up.py install (python执行文件模式下,而非命令行交互模式下)
另外,如何不通过python接口操作MySQL,参考21分钟MySQL入门教程,看看安装部分。
有两点值得注意,
第一点,所有的操作都是针对某个具体的数据库,有两种方式实现:
一: 在登录数据库时指定, 命令: mysql -D 所选择的数据库名 -h 主机名 -u 用户名 -p
例如登录时选择创建的数据库samp_db: mysql -D samp_db -u root -p
当然,第一次使用MySQL需要先创建一个数据库之后才能用这种方法!
二: 在登录后使用 use 语句指定, 命令: use 数据库名 ;
use 语句可以不加分号, 执行 use samp_db 来选择刚刚创建的数据库, 选择成功后会提示: Database changed
第二点,关于环境变量path的配置没有那么复杂,直接在path系统变量添加上MySQL安装目录里bin文件夹的完整目录即可。
MySQL免安装版本
1. 解压在C盘(其他也可以)Program Files下,文件夹为mysql
2. 配置文件:把my-small.ini重命名为my.ini,并添加如下配置
3. 配置环境变量:Path系统变量添加安装目录下(C:\Program Files\mysql)的bin文件夹
4. 管理员身份运行cmd.exe:
1)sc delete MySQL:确保MySQL服务被删除;
2)务必切换到C:\Program Files\mysql\bin目录下(否则会出现错误),执行 mysqld --install MySQL --defaults-file="c:\Program Files\mysql\my.ini"
3) net start MySQL:启动MySQL服务;
4)net stop MySQL:终止MySQL服务。
ORM:Object-Relational Mapping,把关系数据库的表结构映射到对象上
最有名的ORM框架是SQLAlchemy。
值得注意的是,SQLAlchemy操作的对象是个表,且这个表必须是已经创建的(可以未存储数据),创建表的数据库在创建引擎时与SQLAlchemy连接,这是数据库和SQLAlchemy交互的前提。这在自定义类时必须声明。
如
class User(Base):
# 表的名字:
__tablename__ = 'user'
......
表user就是我们之前创建在MySQL中的( 利用MySQL创建表user)。
很显然,sessionmaker是很重要的一环,它是沟通python和数据库的桥梁。当然创建sessionmaker,还要引擎(实质就是上图中大方框中的内容的集合)的帮助。根据sessionmaker和引擎创建出(沟通python和数据库的)类,利用此类创建出实例,然后所有的操作都由该实例的相应方法完成。
代码:
# -*- coding:utf-8 -*-
#ORM:把数据库表的行与相应的对象建立关联,互相转换。
# 导入:
from sqlalchemy import Column, String, create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
# 创建对象的基类:
Base = declarative_base()
# 定义User对象(用于对每个表list的每个元素(tuple)进行初始化,如User('1', 'Michael')):
class User(Base):
# 表的名字:
__tablename__ = 'user'
# 表的结构:
id = Column(String(20), primary_key=True)
name = Column(String(20))
# 创建引擎,与指定数据库连接:
engine = create_engine('mysql+mysqlconnector://root:19921005@localhost:3306/test')
# 创建DBSession类
DBSession = sessionmaker(bind=engine)
#
#有了ORM,我们向数据库表中添加一行记录,可以视为添加一个User对象
#
# 创建session实例,与数据库对话、交互:
session = DBSession()
# 创建新User对象:
new_user = User(id='6',name='zhuma')
# 添加到session:
session.add(new_user)
# 提交即保存到数据库:
session.commit()
# 关闭session:
session.close()
# 创建Session:
session = DBSession()
# 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
usr = session.query(User).filter(User.id=='6').one()
# 打印类型和对象的name属性:
print 'type:', type(usr)
print 'name:', usr.name
# 关闭Session:
session.close()