- 目录:
- 一、MySQLdb 模块使用流程
- (一)安装、验证
- 1. 安装
- 2. 验证
- 3. 文档地址
- (二)MySQLdb 模块使用流程
- 1. 使用python连接数据库
- 2. 创建游标对象
- 3. 使用游标对象的方法操作数据库
- 4. 提交或回滚
- 5. 关闭游标对象
- 6. 关闭数据库连接
- 二、pymysql 模块使用流程
- 1. 使用python连接数据库
- 2. 创建游标对象
- 3. 使用游标对象的方法操作数据库
- 4. 提交或回滚
- 5. 关闭游标对象
- 6. 关闭数据库连接
- 三、ORM对象关系映射(数据库框架)
- (一)MySQL主要实现
- (二)SQLAlchemy使用
- 1. 安装和配置
- 2. SQLAlchemy模型
- 1)常见类型
一、MySQLdb 模块使用流程
(一)安装、验证
1. 安装
pip install mysql-client
注意:在cmd终端上使用命令。
【官网下载pip地址】
【windows无法安装时解决方法】
2. 验证
运行以下两行代码,无报错即为安装成功。
python
import MySQLdb
3. 文档地址
(二)MySQLdb 模块使用流程
1. 使用python连接数据库
import MySQLdb
对象名 = MySQLdb.connect(
host = "主机IP地址",
port = 端口号,
user = "用户名",
passwd = "密码",
db = "数据库",
charset = '编码类型')
例:
import MySQLdb
def get_conn(self):
try:
self.con = MySQLdb.connect(
# 本机地址 localhost 或 127.0.0.1
host = "localhost",
port = 3306,
user = "root",
passwd = "123456",
db = "news",
charset = 'utf8')
except MySQLdb.Error as e:
print("Error %d: %s" % (e.args[0], e.aegs[1]))
return self.con
2. 创建游标对象
对象名.cursor()
3. 使用游标对象的方法操作数据库
1)执行SQL命令
游标对象名.execute('SQL命令')
2)取得结果集的第一条记录
游标对象名.fetchone()
3)取得结果集的 n 条记录
游标对象名.fetchmany(n)
4)取得结果集的所有记录
游标对象名.fetchall()
4. 提交或回滚
对象名.commit
对象名.rollback()
5. 关闭游标对象
cursor.close()
6. 关闭数据库连接
对象名.close()
例:
# 使用例子前,需在数据库创建,代码如下:
CREATE TABLE 'news'(
'id' INT NOT NULL AUTO_INCREMENT,
'title' VARCHAR(200) NOT NULL,
'image' VARCHAR(300) NULL,'author' VARCHAR(20),
'view_count' INT DEFAULT 0,
'created_at' DATETIME NULL,
'is_valid' SMALLINT DEFAULT 1,
PRIMARY KEY('id'))
DEFAULT CHARSET = 'UTF8';
对MySQL语句有不懂的,请看【python3数据库MySQL语句(入门)】
import MySQLdb
class MysqlSearch(object):
# 初始化启动
def __init__(self):
self.get_conn()
# 获取连接
def get_conn(self):
try:
self.conn = MySQLdb.connect(
# 本机地址 localhost 或 127.0.0.1
host = "localhost",
port = 3306,
user = "root",
passwd = "123456",
db = "news",
charset = 'utf8')
except MySQLdb.Error as e:
print("Error: %s" % e)
def close_conn(self):
try:
if self.conn:
# 关闭连接
self.conn.close()
except MySQLdb.Error as e:
print("Error: %s" % e)
# 获取一条数据
def get_one(self):
# 准备SQL
sql = "SELECT * FROM 'news' WHERE 'types' = %s ORDER BY 'created_at' DESC;"
# 找到cursor
cursor = self.conn.cursor()
# 执行SQL
cursor.execute(sql, ('百家',))
# print(cursor.rowcount)
# 拿到一条结果
rests = cursor.fetchone()
rest = dict(zip([k[0] for k in cursor.description], rests))
# 处理数据
# print(rest)
# print(rest['title'])
# 关闭cursor和关闭数据库连接
cursor.close()
self.close_conn()
return rest
# 获取全部数据
def get_more(self):
# 准备SQL
sql = "SELECT * FROM 'news' WHERE 'types' = %s ORDER BY 'created_at' DESC;"
# 找到cursor
cursor = self.conn.cursor()
# 执行SQL
cursor.execute(sql, ('百家',))
# print(cursor.rowcount)
# 拿到全部结果
rests = cursor.fetchall()
rest = [dict(zip([k[0] for k in cursor.description],row)) for row in rests]
# 处理数据
# print(rest)
# print(rest['title'])
# 关闭cursor和关闭数据库连接
cursor.close()
self.close_conn()
return rest
# 分页查询
def get_more_by_page(self, page, page_size):
# 准备SQL
offset = (page - 1) * page_size
sql = "SELECT * FROM 'news' WHERE 'types' = %s ORDER BY 'created_at' DESC LMIT %s, %s;"
# 找到cursor
cursor = self.conn.cursor()
# 执行SQL
cursor.execute(sql, ('百家', offset, page_size))
# print(cursor.rowcount)
# 拿到全部结果
rest = [dict(zip([k[0] for k in cursor.description],row)) for row in cursor.fetchall()]
# 处理数据
# print(rest)
# print(rest['title'])
# 关闭cursor和关闭数据库连接
cursor.close()
self.close_conn()
return rest
# 增加一条数据
def add_one(self):
try:
# 准备SQL
sql = (
"INSERT INTO 'news'('title', 'image', 'content', 'types', 'is_valid')"
"VALUE(%s, %s, %s, %s, %s);"
)
# 获取链接和cursor
cursor = self.conn.cursor()
# 执行sql
# 提交数据到数据库
cursor.execute(sql, ('标题1', '/static/img/news/01.png', '新闻内容1', '推荐', 1))
# 提交事务
self.conn.commit()
# 关闭cursor和链接
cursor.close()
except:
self.conn.rollback()
self.close_conn()
def main():
obj = MysqlSearch()
# 取一条数据
# rest = obj.get_one()
# print(rest)
# print(rest['title'])
# 取全部数据
# rest = obj.get_more()
# for item in rest:
# print(item)
# print(item['title'])
rest = obj.add_one()
print(rest)
if __name__ == '__main__':
main()
二、pymysql 模块使用流程
- python3自带 pymysql 模块。
1. 使用python连接数据库
import pymysql
对象名 = pymysql.connect('主机地址','用户名','密码','库名',charset='utf8')
2. 创建游标对象
对象名.cursor()
3. 使用游标对象的方法操作数据库
1)执行SQL命令
游标对象名.execute('SQL命令')
2)取得结果集的第一条记录
游标对象名.fetchone()
3)取得结果集的 n 条记录
游标对象名.fetchmany(n)
4)取得结果集的所有记录
游标对象名.fetchall()
4. 提交或回滚
对象名.commit
对象名.rollback()
5. 关闭游标对象
cursor.close()
6. 关闭数据库连接
对象名.close()
例1:
import pymysql
# 1.创建数据库连接
db = pymysql.connect('localhost', 'root', '123456', 'MOSHOU', charset='utf8')
# 2.创建游标对象
cursor = db.cursor()
# 3.利用游标对象 curso 的方法来操数据库
cursor.execute('insert into sheng values(100,210000,"四川省");')
# 4.提交到数据库 commit
db.commit()
# 5.关闭游标对象
cursor.close()
# 6.关闭数据库连接
db.close()
例2:
import pymysql
db = pymysql.connect('localhost', 'root', '123456', 'MOSHOU', charset='utf8')
cur = db.cursor()
sql_select = 'select * from city;'
cur.execute(sql_select)
data = cur.fetchone()
print('fetchone的结果为', data)
data2 = cur.fetchmany(2)
print('fetchone2的结果为', data2)
data3 = cur.fetchall()
print('fetchall的结果为:')
for i in data3:
print(i)
db.commit()
cur.close()
db.close()
例3:
import pymysql
db = pymysql.connect('localhost', 'root', '123456', 'db2', charset='utf8')
cur = db.cursor()
try:
cur.execute('update CCB set money=5000 where name="Zhuanqian";')
cur.execute('update ICBC set money=9000 where name="Shouqian";')
#cur.execute('update ICBC ...;')
db.commit()
print('ok')
except Exception as e:
db.rollback()
print('出现错误,已回滚')
cur.close()
db.close()
例4:
# 文件名为MySQLPython.py
from pymysql import *
class mysqlpython:
def __init__(self, host, port, db, user, passwd, charset):
self.host = host
self.port = port
self.db = db
self.user = user
self.passwd = passwd
self.charset = charset
def open(self):
self.conn = connect(host=self.host,
port=self.port, db=self.db, user=self.user,
passwd=self.passwf, charset=self.charset)
self.cursor = self.conn.cursor()
def close(self):
self.cursor.close()
self.conn.close()
def zhixing(self, sql):
self.open()
self.cursor.execute(sql)
self.conn.commit()
self.close()
print('ok')
# 文件名为test.py
from mysqlpython import mysqlpython
# 创建实例化对象
sqlh = mysqlpython('localhost', 3306, 'MOSHOU', 'root', '123456')
sql_update = 'update sheng set id=150 where id=1;'
sqlh.zhixing(sql_update)
三、ORM对象关系映射(数据库框架)
(一)MySQL主要实现
1. SqlObject
2. peewee
3. Django’s ORM
4. SQLAlchemy
(二)SQLAlchemy使用
- SQLAlchemy原理图:
1. 安装和配置
- 下载地址:
【SQLAlchemy下载地址】 - 安装命令:
pip install SQLAlchemy
- 测试:
python
>>> import sqlalchemy
>>> sqlalchemy.__version__
注意:无报错则安装成功
2. SQLAlchemy模型
1)常见类型
SQLAlchemy的类型 | MySQL相对应的类型 | SQLAlchemy说明 |
Integer | int | 整型 |
Float | float | 浮点型 |
Boolean | smallint | 布尔型 |
ForeignKey | foreign key | 外键 |
Date/DtarTime | Date/DtarTime | 日期 |
String | varchar | 字符类型 |
例:
class News(Base):
__tablename__ = 'news'
id = Cloumn()
待续。。。