ORM(Object Relation Mapping对象关系映射)
3、ORM(Object Relation Mapping对象关系映射)
1、定义
把对象模型映射到MySQL数据库中
2、sqlalchemy安装
在线 :sudo pip3 install sqlalchemy
离线 :
$ tar -xf sql….tar.gz
$ cd sqlalchemy
$ sudo python3 setup.py install
3、示例
class User(Base):
tablename = “t123”
id = Column(Integer,primary_key=True)
name = Column(String(20))
4、映射类型
1、Python类(class) <—> 数据库中表
class User … t123
2、Python中类属性 <—> 数据库中表字段(id ..)
id = Column(Integer)
3、关系映射
1:1 :主外键关联,添加唯一约束
1:n :主外键关联
m:n :通过中间表实现,见 多对多关联实现.png
5、示例
1、在db5库创建表t123,表中字段有
id 整型,设置为主键,自增长
name 字符类型,宽度20
phnumber 字符类型,宽度11
图形界面
Windows :Navicat
ORM框架
SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。
https://www.cnblogs.com/pycode/p/mysql-orm.html
https://www.cnblogs.com/kennyhr/p/3654491.html
https://www.cnblogs.com/Jason504327775/p/8522224.html
例子———相对于远程操作。
例子———相对于远程操作。 ,对 多种 形式的数据 进行mysql的操作。 例如 excel。 txt文件
ORM操作mysql
# Author:danchengimport pymysql#创建链接conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='123', db='test')#创建游标cursor = conn.cursor()#执行SQL,并返回收影响行数offect_row = cursor.execute("insert into first(name) values('dancheng')")#提交,不然无法保存新建或者修改的数据conn.commit()#offect_row = cursor.execute("select * from first")#print(cursor.fetchall())#关闭游标cursor.close()#关闭连接conn.close()# 多条数据的插入和链接# Author:danchengimport pymysql#创建链接conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='123', db='test')#创建游标cursor = conn.cursor()data = [("qidehan"),("liushuai"),("sunkeqiang")]#插入多条语句cursor.executemany("insert into first(name) values(%s)", data)conn.commit()#关闭游标cursor.close()#关闭连接conn.close()
需要下载sqlalchemy文件包
利用orm创建一个表
# Author:danchengimport sqlalchemyfrom sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, Stringengine = create_engine("mysql+pymysql://root:123@localhost/test", encoding='utf-8', echo=True)Base = declarative_base() #生成orm基类class User(Base):__tablename__ = 'user' #表名id = Column(Integer, primary_key=True)name = Column(String(32))password = Column(String(64))Base.metadata.create_all(engine) #创建表结构
添加数据
# Author:danchengimport sqlalchemyfrom sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, Stringfrom sqlalchemy.orm import sessionmakerengine = create_engine("mysql+pymysql://root:123@localhost/test", encoding='utf-8', echo=True)#添加数据Session_class = sessionmaker(bind=engine) # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例Session = Session_class() # 生成session实例 #cursoruser_obj = User(name="dancheng", password="123") # 生成你要创建的数据对象print(user_obj.name, user_obj.id) # 此时还没创建对象呢,不信你打印一下id发现还是NoneSession.add(user_obj) # 把要创建的数据对象添加到这个session里, 一会统一创建print(user_obj.name, user_obj.id) # 此时也依然还没创建Session.commit() # 现此才统一提交,创建数据
查询
data = Session.query(User).filter(User.id > 1).filter(User.id < 3).first()
修改
data = Session.query(User).filter(User.id > 1).filter(User.id < 3).first()#print(data)data.name = 'dancheng1'Session.commit() # 现此才统一提交,创建数据
作者:dancheng_work
来源:CSDN
原文:https://blog.csdn.net/dancheng1/article/details/78277230
版权声明:本文为博主原创文章,转载请附上博文链接!
