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:dancheng
import 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:dancheng
import 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:dancheng
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
engine = 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:dancheng
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
engine = 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实例 #cursor
user_obj = User(name="dancheng", password="123") # 生成你要创建的数据对象
print(user_obj.name, user_obj.id) # 此时还没创建对象呢,不信你打印一下id发现还是None
Session.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
版权声明:本文为博主原创文章,转载请附上博文链接!