博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python学习--17 访问数据库
阅读量:6657 次
发布时间:2019-06-25

本文共 2532 字,大约阅读时间需要 8 分钟。

实际开发中,我们会经常用到数据库。

Python里对数据库的操作API都很统一。

SQLite

SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。

Python内置了sqlite3。

#coding:utf-8import sqlite3conn = 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()

输出:

1[(1, 'yjc'), (2, 'yjc')]

我们发现Python里封装的数据库操作很简单:

1、获取连接conn
2、获取游标cursor
3、使用cursor.execute()执行SQL语句;
4、使用cursor.rowcount返回执行insert,update,delete语句受影响的行数;
5、使用cursor.fetchall()获取查询的结果集。结果集是一个list,每个元素都是一个tuple,对应一行记录;
6、关闭游标和连接。

如果SQL语句带有参数,那么需要把参数按照位置传递给cursor.execute()方法,有几个?占位符就必须对应几个参数,示例:

cursor.execute('select * from user where name=? ', ['abc'])

为了能在出错的情况下也关闭掉Connection对象和Cursor对象,建议实际项目里使用try:...except:...finally:...结构。

MySQL

MySQL是最流行的关系数据库。

SQLite的特点是轻量级、可嵌入,但不能承受高并发访问,适合桌面和移动应用。而MySQL是为服务器端设计的数据库,能承受高并发访问,同时占用的内存也远远大于SQLite。

使用需要先安装MySQL:

Windows版本安装时注意选择UTF-8编码,以便正确地处理中文。

MySQL的配置文件是my.ini,Linux一般位于/etc/my.cnf。配置里需要设置编码为utf-8。配置示例:

[client]default-character-set = utf8[mysqld]default-storage-engine = INNODBcharacter-set-server = utf8collation-server = utf8_general_ci

Python并未内置MySQL的驱动。需要先安装:

$ pip3 install mysql-connectorCollecting mysql-connector  Downloading mysql-connector-2.1.4.zip (355kB)    100% |████████████████████████████████| 358kB 355kB/sBuilding wheels for collected packages: mysql-connector  Running setup.py bdist_wheel for mysql-connector ... doneSuccessfully built mysql-connectorInstalling collected packages: mysql-connectorSuccessfully installed mysql-connector-2.1.4

Python使用MySQL示例:

# coding: utf-8import mysql.connectorconn = mysql.connector.connect(user='root', password='123456', database='test')cursor = conn.cursor()cursor.execute("insert into user(id,name,age)values(null,'python', 20)")print(cursor.rowcount)conn.commit()cursor.execute("select * from user order by id desc limit 3")print(cursor.fetchall())cursor.close()conn.close

输出:

1[(25, 'python', 1, 20, 1), (24, 'python', 1, 20, 1), (23, 't2', 2, 23, 1)]

如果SQL语句带有参数,那么需要把参数按照位置传递给cursor.execute()方法,MySQL的占位符是%s,示例:

cursor.execute('select * from user where name=%s and age=%s', ['python', 20])

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

转载于:https://www.cnblogs.com/52fhy/p/6380344.html

你可能感兴趣的文章
老友记
查看>>
Xamarin.Forms特殊的视图BoxView
查看>>
【emWin】例程二十六:窗口对象——Listbox
查看>>
HTML5 Canvas 绘制二十四字真言钟表
查看>>
oracle12c ORA-28040: No matching authentication protocol
查看>>
转:基于LDA的Topic Model变形
查看>>
PHP引号转义中解决POST,GET,Mysql数据自动转义问题
查看>>
DataGridView的Validating事件注册后删除操作的处理
查看>>
C#中的线程三 (结合ProgressBar学习Control.BeginInvoke)
查看>>
RAMPS1.4 3d打印控制板接线与测试4
查看>>
matlab中如何求某一个矩阵的标准差和均值
查看>>
Leetcode: Find Peak Element
查看>>
Android 抓包,监控流量工具之 mitmproxy
查看>>
hOAuth2.0认证和授权原理
查看>>
Leetcode: Sentence Screen Fitting
查看>>
How To PLAY_SOUND in Oracle Forms
查看>>
atitit.提升开发效率---使用server控件生命周期 asp.net 11个阶段 java jsf 的6个阶段比較...
查看>>
资源下载南方cass视频教程,包括文档,数据,很全的
查看>>
CoreAudio实现录音播音和扬声器听筒模式的切换
查看>>
CSV
查看>>