ORM的全称是Object Relational Mapping,即对象关系映射。它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作。因此它的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作
优点:不用使用复杂的sql语句,且通俗易懂,不用维护大量的sql语句,系统自动将其转换成sql语句
缺点:ORM方式,效率低,当需要高效操作数据的时候,还是需要用SQL语句
代码示例:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String,create_engine
from sqlalchemy.orm import sessionmaker
#生成基类 所有表构建的类都是基类之上的 继承这个基类
Base = declarative_base()
class Student(Base):
__tablename__ ='student'#表名
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer,default=0)#默认0
score = Column(Integer,default=60)#默认60
#创建引擎 相当于连接
engine = create_engine('mysql+pymysql://test:123456@localhost:3306/testdb')
DBSession = sessionmaker(engine)
session = DBSession()#必须实例化对象
#使用ORM方式对student表做一个查询
students = session.query(Student).limit(10)
for s in students:
print(s.id,s.name,s.age,s.score)
session.close()#必须要关闭
代码如下(示例):
#填入数据
#随机生成 两个字的姓名 年龄 分数
for _ in range(10):
s = Student(name=''.join(random.sample('张王天男别奥法妹大',2)),
age=random.randint(16,22),score=random.randint(55,89))
#add只是把对象加到session里面,最中执行是下面的commit()
session.add(s)
#把添加的数据 整个让数据库执行,最终添加
session.commit()
代码如下(示例):
#条件查询
#查找所有(all())名字是男奥的同学并打印出来
students = session.query(Student).filter(Student.name =='男奥').all()
for s in students:
#print(s) 只是输出对象
print(s.id,s.name,s.age,s.score)
代码如下(示例):
'''
students = session.query(Student).filter(Student.name =='王天').limit(1)
'''
students = session.query(Student).filter(Student.name =='王天').limit(2)
当名字是唯一的时候可以用one(),即一般对主键使用one()【主键不可能会重复】
当查找个别所需数据时用limit()
当在所有数据中查找数据时使用all()
理解并掌握limit()与one()之间的区别:
即使limit(1),也应该使用for循环通过迭代的方式输出数据【limit()函数返回的是列表】
one()函数返回的是对象【one()是唯一】
代码示例:
#修改数据
student = session.query(Student).filter(Student.name =='Tom').one()
print(student.age)
student += 2
session.add(student)
session.commit()
student = session.query(Student).filter(Student.name =='Tom').one()
print(student.age)
修改前:
问题1:NameError: name ‘random’ is not defined
解决:加入 import random
问题2:数据库中文名字插入失败(如图)
我用的是VS Code编辑器(使用VS后这个问题一直存在,直到与数据库结合后发现得解决了)
解决:在折腾了两个小时左右,(网上的教程对我的情况没什么用)最终采取了终极的办法----->卸载从新安装
数据库这东西卸载最好跟着网上教程来,自己卸载可能会卸载不干净导致二次安装失败
MySql卸载教程
结果展示:
中文名字是卸载后从新安装成功插入的
补充:为什么MySql插入中文失败?
SHOW VARIABLES LIKE ‘character%’; //使用该命令