本篇对于Python操作MySQL主要使用两种方式:
原生模块 pymsql
ORM框架 SQLAchemy
一、pymsql
pymsql是Python中操作MySQL的模块。
下载安装
pip install pymsql
使用操作
1、执行SQL
importpymysql#创建连接
conn = pymysql.connect(host='192.168.242.133', port=3306, user='jehu', passwd='225325', db='mydb')#创建游标
cursor =conn.cursor()#执行SQL,并返回收影响行数
effect_row = cursor.execute("select * from student")print(effect_row)#逐行取出查询结果
print(cursor.fetchone())print(cursor.fetchone())print(cursor.fetchone())print("-----------")#一次取出所有结果,但是是从前面fetchone之后开始取所有
print(cursor.fetchall())
执行结果:
7(4, 'jehu', 'M', 19, 3)
(5, 'alex', 'M', 20, 3)
(6, 'yiwei', 'M', 21, 3)-----------((7, 'xinyue', 'F', 19, 3), (8, 'jingjing', 'F', 21, 3), (9, 'liangqi', 'F', 21, 2), (10, 'wuyuling', 'F', 18, 2))
更新、插入:
importpymysql#创建连接
conn = pymysql.connect(host='192.168.242.133', port=3306, user='jehu', passwd='225325', db='mydb')#创建游标
cursor =conn.cursor()#执行SQL,更新数据
effect_row = cursor.execute("update student set sage=20 where sname='jehu';")#插入数据
data=[
('kaifeng','M',23,3),
('qingquan','M',24,3),
]
effect_row1=cursor.executemany("insert into student (sname,sex,sage,class) values (%s,%s,%s,%s)",data)#提交,不然无法保存新建或者修改的数据
conn.commit()
importpymysql
conn= pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
cursor=conn.cursor()
cursor.execute("select * from hosts")#获取第一行数据
row_1 =cursor.fetchone()#获取前n行数据#row_2 = cursor.fetchmany(3)#获取所有数据#row_3 = cursor.fetchall()
conn.commit()
cursor.close()
conn.close()
二、ORM
ORM介绍
orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为了保证一致的使用习惯,通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,而不用直接使用sql语言。
orm的优点:
隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来。
ORM使我们构造固化数据结构变得简单易行。
缺点:
无可避免的,自动化意味着映射和关联管理,代价是牺牲性能(早期,这是所有不喜欢ORM人的共同点)。现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的。
安装sqlalchemy
在Python中,最有名的ORM框架是SQLAlchemy。
pipinstall SQLAlchemy
sqlalchemy基本使用
importsqlalchemyfrom sqlalchemy importcreate_enginefrom sqlalchemy.ext.declarative importdeclarative_basefrom sqlalchemy importInteger,String,Columnfrom sqlalchemy.orm importsessionmaker#创建一个连接,定义用pymysql操作数据库,数据库账号密码数据库名,echo=True是打印创建语句
engine=create_engine("mysql+pymysql://jehu:225325@192.168.242.133/mydb",encoding='utf-8',echo=True)
Base=declarative_base() #创建orm基类
classUser(Base):__tablename__="user" #表名
id=Column(Integer,primary_key=True)
name=Column(String(23))
password=Column(String(64))
Base.metadata.create_all(engine)#创建表结构,把基于Base的子类都创建
Session_class= sessionmaker(bind=engine) #创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
session=Session_class() #生成session实例
user_obj= User(name="jehu", password="jehu123") #生成你要创建的数据对象
user_obj2 = User(name="zhangzh", password="zhangzh123")
session.add(user_obj)#把要创建的数据对象添加到这个session里, 一会统一创建
session.add(user_obj2)
session.commit()#现此才统一提交,创建数据
https://www.cnblogs.com/alex3714/articles/5978329.html