MySQL和Python交互
与Python交互
python3模块名:pymysql
conda install pymysql
conda install sqlalchemy
python2模块名:MySQLdb
import pymysql
# 1、创建与数据库连接对象
db = pymysql.connect(host='localhost', user='haoen110', password='123',
database='db4', charset='utf8')
# 2、利用db方法创建游标对象
cur = db.cursor()
# 3、利用游标对象execute()方法执行SQL命令
cur.execute("insert into sheng values\
(16,300000,'台湾省');")
# 4、提交到数据库执行
db.commit()
print("OK!")
# 5、关闭游标对象
cur.close()
# 6、断开数据库连接
db.close()
+----+--------+-----------+
| id | s_id | s_name |
+----+--------+-----------+
| 1 | 130000 | 河北省 |
| 2 | 140000 | 陕西省 |
| 3 | 150000 | 四川省 |
| 4 | 160000 | 广东省 |
| 5 | 170000 | 山东省 |
| 6 | 180000 | 湖北省 |
| 7 | 190000 | 河南省 |
| 8 | 200000 | 海南省 |
| 9 | 200001 | 云南省 |
| 10 | 200002 | 山西省 |
| 16 | 300000 | 台湾省 |
+----+--------+-----------+
pymysql 使用流程
1、建立数据库连接db = pymysql.connect(...)
2、创建游标对象cur = db.cursor()
3、游标方法cur.execute("insert ...")
4、提交到数据库db.commit()
5、关闭游标对象cur.close()
6、断开数据库连接db.close()
connect对象
- 建立数据库连接
db = pymysql.connect(...)
- host:主机地址,本地 localhost
- port:端口号,默认3306
- user:用户名
- password:密码
- database:库
- charset:编码方式,推荐使用utf8
数据库连接对象(db)的方法
db.close()
关闭连接db.commit()
提交到数据库执行db.rollback()
回滚cur = db.cursor()
返回游标对象,用于执行SQL具体SQL命令
游标对象(cur)的方法
- 创建游标对象
cur = db.cursor()
cur.execute(SQL命令,[列表])
执行SQL命令cur.close()
关闭游标对象cur.fetchone()
获取第一条数据- 是一个元组(1,100001,"河北省")
cur.fetchone()
获取第一条数据cur.fetchmany(n)
获取n条数据cur.fetchall()
获取所有记录
import pymysql
# 1、创建与数据库连接对象
db = pymysql.connect(host='localhost', user='haoen110', password='123',
database='db4', charset='utf8')
# 2、利用db方法创建游标对象
cur = db.cursor()
# 3、利用游标对象execute()方法执行SQL命令
try:
sql_select = "select * from sheng"
cur.execute(sql_select)
data1 = cur.fetchone()
print(data1)
print("*"*10)
data2 = cur.fetchmany(3)
for m in data2:
print(m)
print("*"*10)
data3 = cur.fetchall()
for m in data3:
print(m)
print("*"*10)
except Exception as e:
db.rollback()
print("出现错误,已回滚", e)
# 4、提交到数据库执行
db.commit()
print("OK!")
# 5、关闭游标对象
cur.close()
# 6、断开数据库连接
db.close()
(1, 130000, '河北省')
**********
(2, 140000, '陕西省')
(3, 150000, '四川省')
(4, 160000, '广东省')
**********
(5, 170000, '山东省')
(6, 180000, '湖北省')
(7, 190000, '河南省')
(8, 200000, '海南省')
(9, 200001, '云南省')
(10, 200002, '山西省')
(16, 300000, '台湾省')
**********
OK!
参数化
# 插入数据
import pymysql
# 1、创建与数据库连接对象
db = pymysql.connect(host='localhost', user='haoen110', password='123',
database='db4', charset='utf8')
# 2、利用db方法创建游标对象
cur = db.cursor()
# 3、利用游标对象execute()方法执行SQL命令
s_id = input("请输入省的编号:")
name = input("请输入省的名字:")
try:
sql_insert = "insert into sheng(s_id,s_name) values(%s,%s);"
cur.execute(sql_insert, [s_id, name])
print("插入成功!")
except Exception as e:
db.rollback()
print("出现错误,已回滚", e)
# 4、提交到数据库执行
db.commit()
print("OK!")
# 5、关闭游标对象
cur.close()
# 6、断开数据库连接
db.close()
请输入省的编号:999
请输入省的名字:haha
插入成功!
OK!
+----+--------+-----------+
| id | s_id | s_name |
+----+--------+-----------+
| 1 | 130000 | 河北省 |
| 2 | 140000 | 陕西省 |
| 3 | 150000 | 四川省 |
| 4 | 160000 | 广东省 |
| 5 | 170000 | 山东省 |
| 6 | 180000 | 湖北省 |
| 7 | 190000 | 河南省 |
| 8 | 200000 | 海南省 |
| 9 | 200001 | 云南省 |
| 10 | 200002 | 山西省 |
| 16 | 300000 | 台湾省 |
| 17 | 999 | haha |
+----+--------+-----------+
自己写封装
from pymysql import *
class Mysqlpython:
def __init__(self, database, host='localhost',
user='haoen110', password='123',
port=3306, charset='utf8'):
self.host = host
self.user = user
self.password = password
self.port = port
self.charset = charset
self.database = database
def open(self):
self.db = connect(host=self.host,
user=self.user,
port=self.port,
database=self.database,
password=self.password,
charset=self.charset)
self.cur = self.db.cursor()
def close(self):
self.cur.close()
self.db.close()
def zhixing(self,sql,L=[]): # pymysql.execute(sql)
try:
self.open()
self.cur.execute(sql,L)
self.db.commit()
print("ok")
except Exception as e:
self.db.rollback()
print("Failed",e)
self.close()
def all(self,sql,L=[]):
try:
self.open()
self.cur.execute(sql,L)
result = self.cur.fetchall()
return result
except Exception as e:
print("Failed",e)
self.close()
# 创建数据库连接对象
# sqlh = Mysqlpython("db4")
# sql_insert = "insert into sheng(s_id,s_name) values(666,'jjj');"
# sqlh.zhixing(sql_insert)
sql_select = "select * from sheng;"
data = sqlh.all(sql_select)
print(data)
ok
((1, 130000, '河北省'), (2, 140000, '陕西省'), (3, 150000, '四川省'), (4, 160000, '广东省'), (5, 170000, '山东省'), (6, 180000, '湖北省'), (7, 190000, '河南省'), (8, 200000, '海南省'), (9, 200001, '云南省'), (10, 200002, '山西省'), (16, 300000, '台湾省'), (17, 999, 'haha'), (18, 666, 'jjj'))
自制登录系统
create table user(
username varchar(20),
password char(40)
);
insert into user values("SHE","7c4a8d09ca3762af61e59520943dc26494f8941b"); # sha1加密的123456
from hashlib import sha1
uname = input("请输入用户名:")
pwd = input("请输入密码:")
# 用sha1给pwd加密
s1 = sha1() # 创建sha1加密对象
s1.update(pwd.encode("utf8")) # 指定编码
pwd2 = s1.hexdigest() # 返回16进制加密的结果
sqlh = Mysqlpython("db4")
select = "select password from user where username=%s;"
result = sqlh.all(select,[uname])
print(result) # 打印出来看看
if len(result) == 0:
print("用户名不存在")
elif result[0][0] == pwd2:
print("登录成功")
else:
print("密码错误")
请输入用户名:SHE
请输入密码:123456
(('7c4a8d09ca3762af61e59520943dc26494f8941b',),)
登录成功
ORM (Object Relation Mapping 对象关系映射)
定义:
- 把对象模型映射到MySQL数据库中
sqlalchemy模块安装
示例:
class User(Base):
__tablename__="t1" # 声明要创建的表名
id = Column(Integer, primary+key=True)
name = Column(String(20))
# 解释:User 一张表,id name
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String
engine = create_engine("mysql+pymysql://haoen110:123@localhost/db4",encoding="utf8")
Base = declarative_base() # orm基类
class User(Base): # 继承Base基类
__tablename__ = "t123"
id = Column(Integer,primary_key=True)
name = Column(String(20))
address = Column(String(40))
Base.metadata.create_all(engine)
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | NULL | |
| address | varchar(40) | YES | | NULL | |
+---------+-------------+------+-----+---------+----------------+
MySQL和Python交互的更多相关文章
- mysql及python交互
mysql在之前写过一次,那时是我刚刚进入博客,今天介绍一下mysql的python交互,当然前面会把mysql基本概述一下. 目录: 一.命令脚本(mysql) 1.基本命令 2.数据库操作命令 3 ...
- pymysql实现MySQL与Python交互
常见MySQL操作 所需模块: pip3 install pymysql 查询(fetchone,fetchmany,fetchall): import pymysql #连接 con = pymys ...
- 数据库之MySQL与Python交互
准备数据 创建数据表 -- 创建 "京东" 数据库 create database jing_dong charset=utf8; -- 使用 "京东" 数据库 ...
- MySql与python交互
No1: 引入MySql:python2是Mysqldb,python3是pymysql No2: Connection对象 用于建立与数据库的连接 创建对象:调用connect()方法 conn=c ...
- Python全栈 MySQL 数据库(SQL命令大全、MySQL 、Python调用)
为了梦想与了信仰 开局一张图 主要三个方面: 1.Linux终端命令 2.MySQL语句 3.Python调用 先删库 再跑路..... ...
- MysQL使用一与Python交互
与python交互 在熟练使用sql语句的基础上,开始使用python语言提供的模块与mysql进行交互 这是我们在工作中大事要做的事 先学会sql是基础,一定要熟练编写sql语句 安装引入模块 安装 ...
- MySQL 存储引擎、锁、调优、失误与事务回滚、与python交互、orm
1.存储引擎(处理表的处理器) 1.基本操作 1.查看所有存储引擎 mysql> show engines; 2.查看已有表的存储引擎 mysql> show create table 表 ...
- 开发使用mysql的一些必备知识点整理(四)与python交互
与python交互 在熟练使用sql语句的基础上,开始使用python语言提供的模块与mysql进行交互 这是我们在工作中大事要做的事 先学会sql是基础,一定要熟练编写sql语句 安装引入模块 安装 ...
- MySQL——python交互
与python交互之前我们需要安装一个MySQL的驱动模块Connector,这个驱动模块直接在cmd命令行输入 pip install mysql.connector 安装是否成功可以接着输入 py ...
随机推荐
- Java Web学习总结(21)——http协议响应状态码大全以及常用状态码
http协议响应状态码大全以及常用状态码 当我们在浏览网页或是在查看服务器日志时,常会遇到3位数字的状态码,这3位数字是什么意思呢?其实,这3位数字是HTTP状态码,用来表示网页服务器HTTP响应状态 ...
- CCF模拟题 有趣的数
有趣的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都 ...
- LeetCode 223 Rectangle Area(矩形面积)
翻译 找到在二维平面中两个相交矩形的总面积. 每一个矩形都定义了其左下角和右上角的坐标. (矩形例如以下图) 如果,总占地面积永远不会超过int的最大值. 原文 分析 这题前天试过,写了一堆推断.终究 ...
- 72.调用req.flash('error', '用户已存在!'); 时候 报错 "req.flash is not a function"
在app.js 中调用app.use 的顺序有关 app.use(session({ secret: settings.cookieSecret, key: settings.db,//cookie ...
- EF中执行Sql语句
Entity Framework是微软出品的高级ORM框架,大多数.NET开发者对这个ORM框架应该不会陌生.本文主要罗列在.NET(ASP.NET/WINFORM)应用程序开发中使用Entity F ...
- c# array arraylist 泛型list
1 array 数组 是存储相同类型元素的固定大小的数据的顺序集合.在内存中是连续存储的,所以索引速度非常快,而且赋值和修改元素也非常简单. //定义字符串数组 大小为3 string[] str1 ...
- thuwc9102划水记
thuwc9102划水记 Day -2 时隔两个月之后终于回一次家,心情非常愉悦,开始浪. Day 0 晚上回到学校,然而机房里并没多少人,大佬们明天才回来.╮(╯▽╰)╭ Day 1 中午饭菜挺好吃 ...
- BZOJ3994: [SDOI2015]约数个数和(莫比乌斯反演)
Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. Out ...
- VMwarep挂载镜像及配置本地Yum源
1.挂载镜像: *. 通过mount命令 linux mount挂载设备(u盘,光盘,iso等 )使用说明 *. 通过VMware的控制页面手工挂载 1.1 打开Vmware软 ...
- Ubuntu 下安装 Python 虚拟环境
写在前面: 安装指南是在 Ubuntu 下面操作的.不同的 Linux 版本,安装指令不同.所以,该指南的某些指令对于像 CentOS 等非 Ubuntu 系统不适用. 为什么需要使用虚拟环境? 虚拟 ...