0
点赞
收藏
分享

微信扫一扫

极客编程python入门-数据库


数据库


程序运行的时候,数据都是在内存中的。当程序终止的时候,通常都需要将数据保存到磁盘上,无论是保存到本地磁盘,还是通过网络保存到服务器上,最终都会将数据写入磁盘文件。


使用SQLite


要操作关系数据库,首先需要连接到数据库,一个数据库连接称为Connectio n; 连接到数据库后,需要打开游标,称之为Cursor,通过Cursor执行SQL语句,然后,获得执行结果。


# 导入SQLite驱动:
>>> import sqlite3
# 连接到SQLite数据库
# 数据库文件是test.db
# 如果文件不存在,会自动在当前目录创建:
>>> conn = sqlite3.connect('test.db')
# 创建一个Cursor:
>>> cursor = conn.cursor()
# 执行一条SQL语句,创建user表:
>>> cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')
<sqlite3.Cursor object at 0x10f8aa260>
# 继续执行一条SQL语句,插入一条记录:
>>> cursor.execute('insert into user (id, name) values (\'1\', \'Michael\')')
<sqlite3.Cursor object at 0x10f8aa260>
# 通过rowcount获得插入的行数:
>>> cursor.rowcount
1
# 提交事务:
>>> conn.commit()
# 关闭Cursor:
>>> cursor.close()
# 关闭Connection:
>>> conn.close()


查询记录:


>>> conn = sqlite3.connect('test.db')
>>> cursor = conn.cursor()
# 执行查询语句:
>>> cursor.execute('select * from user where id=?', ('1',))
<sqlite3.Cursor object at 0x10f8aa340>
# 获得查询结果集:
>>> values = cursor.fetchall()
>>> values
[('1', 'Michael')]
>>> cursor.close()
>>> conn.close()


1、使用Python的DB-API时,只要搞清楚​​Connection​​​和​​Cursor​​对象,打开后一定记得关闭,就可以放心地使用。

2、使用​​Cursor​​​对象执行​​insert​​​,​​update​​​,​​delete​​​语句时,执行结果由​​rowcount​​返回影响的行数,就可以拿到执行结果。

3、使用​​Cursor​​​对象执行​​select​​​语句时,通过​​fetchall()​​​可以拿到结果集。结果集是一个​​list​​​,每个元素都是一个​​tuple​​,对应一行记录。


小结


在Python中操作数据库时,要先导入数据库对应的驱动,然后,通过​​Connection​​​对象和​​Cursor​​对象操作数据。

要确保打开的​​Connection​​​对象和​​Cursor​​对象都正确地被关闭,否则,资源就会泄露。

如何才能确保出错的情况下也关闭掉​​Connection​​​对象和​​Cursor​​​对象呢?请回忆​​try:...except:...finally:...​​的用法。


MySQL


MySQL是为服务器端设计的数据库,能承受高并发访问,同时占用的内存也远远大于SQLite。


安装MySQL驱动


$ pip install mysql-connector-python --allow-external mysql-connector-python


如何连接到MySQL服务器的test数据库:


# 导入MySQL驱动:
>>> import mysql.connector
# 注意把password设为你的root口令:
>>> conn = mysql.connector.connect(user='root', password='password', database='test')
>>> cursor = conn.cursor()
# 创建user表:
>>> cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')
# 插入一行记录,注意MySQL的占位符是%s:
>>> cursor.execute('insert into user (id, name) values (%s, %s)', ['1', 'Michael'])
>>> cursor.rowcount
1
# 提交事务:
>>> conn.commit()
>>> cursor.close()
# 运行查询:
>>> cursor = conn.cursor()
>>> cursor.execute('select * from user where id = %s', ('1',))
>>> values = cursor.fetchall()
>>> values
[('1', 'Michael')]
# 关闭Cursor和Connection:
>>> cursor.close()
True
>>> conn.close()


由于Python的DB-API定义都是通用的,所以,操作MySQL的数据库代码和SQLite类似。


小结


  • 执行INSERT等操作后要调用​​commit()​​提交事务;
  • MySQL的SQL占位符是​​%s​​。
举报

相关推荐

0 条评论