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

  1. # Author:dancheng
  2. import pymysql
  3. #创建链接
  4. conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='123', db='test')
  5. #创建游标
  6. cursor = conn.cursor()
  7. #执行SQL,并返回收影响行数
  8. offect_row = cursor.execute("insert into first(name) values('dancheng')")
  9. #提交,不然无法保存新建或者修改的数据
  10. conn.commit()
  11. #offect_row = cursor.execute("select * from first")
  12. #print(cursor.fetchall())
  13. #关闭游标
  14. cursor.close()
  15. #关闭连接
  16. conn.close()
  17. # 多条数据的插入和链接
  18. # Author:dancheng
  19. import pymysql
  20. #创建链接
  21. conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='123', db='test')
  22. #创建游标
  23. cursor = conn.cursor()
  24. data = [
  25. ("qidehan"),
  26. ("liushuai"),
  27. ("sunkeqiang")
  28. ]
  29. #插入多条语句
  30. cursor.executemany("insert into first(name) values(%s)", data)
  31. conn.commit()
  32. #关闭游标
  33. cursor.close()
  34. #关闭连接
  35. conn.close()

需要下载sqlalchemy文件包

利用orm创建一个表

  1. # Author:dancheng
  2. import sqlalchemy
  3. from sqlalchemy import create_engine
  4. from sqlalchemy.ext.declarative import declarative_base
  5. from sqlalchemy import Column, Integer, String
  6. engine = create_engine("mysql+pymysql://root:123@localhost/test", encoding='utf-8', echo=True)
  7. Base = declarative_base() #生成orm基类
  8. class User(Base):
  9. __tablename__ = 'user' #表名
  10. id = Column(Integer, primary_key=True)
  11. name = Column(String(32))
  12. password = Column(String(64))
  13. Base.metadata.create_all(engine) #创建表结构

添加数据

  1. # Author:dancheng
  2. import sqlalchemy
  3. from sqlalchemy import create_engine
  4. from sqlalchemy.ext.declarative import declarative_base
  5. from sqlalchemy import Column, Integer, String
  6. from sqlalchemy.orm import sessionmaker
  7. engine = create_engine("mysql+pymysql://root:123@localhost/test", encoding='utf-8', echo=True)
  8. #添加数据
  9. Session_class = sessionmaker(bind=engine) # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
  10. Session = Session_class() # 生成session实例 #cursor
  11. user_obj = User(name="dancheng", password="123") # 生成你要创建的数据对象
  12. print(user_obj.name, user_obj.id) # 此时还没创建对象呢,不信你打印一下id发现还是None
  13. Session.add(user_obj) # 把要创建的数据对象添加到这个session里, 一会统一创建
  14. print(user_obj.name, user_obj.id) # 此时也依然还没创建
  15. Session.commit() # 现此才统一提交,创建数据

查询

data = Session.query(User).filter(User.id > 1).filter(User.id < 3).first()

修改

  1. data = Session.query(User).filter(User.id > 1).filter(User.id < 3).first()
  2. #print(data)
  3. data.name = 'dancheng1'
  4. Session.commit() # 现此才统一提交,创建数据

作者:dancheng_work

来源:CSDN

原文:https://blog.csdn.net/dancheng1/article/details/78277230

版权声明:本文为博主原创文章,转载请附上博文链接!