Linux运维知识之ORM、SQLAlchemy数据库操作
小标 2019-05-14 来源 : 阅读 1809 评论 0

摘要:本文主要向大家介绍了Linux运维知识之ORM、SQLAlchemy数据库操作,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。

本文主要向大家介绍了Linux运维知识之ORM、SQLAlchemy数据库操作,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。

Linux运维知识之ORM、SQLAlchemy数据库操作

了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来。

2、ORM使我们构造固化数据结构变得简单易行。


sqlalchemy安装


在Python中,最有名的ORM框架是SQLAlchemy。用户包括openstack\Dropbox等知名公司或应用


安装:


pip install SQLAlchemy
SQLAlchemy==1.2.7

pip install pymysql


数据库:


CentOS Linux release 7.4.1708


mysql版本:5.6.35

IP:192.168.1.48

用户:root

密码:123456

创建一个超级用户:grant all privileges on . to jacker@’%’ identified by ‘123456’ WITH GRANT OPTION;

创建一个数据库: mysql> create database sqlalchemy;


方式一:


import pymysql
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://jacker:123456@192.168.1.48/sqlalchemy',encoding='utf-8',echo=True)
#echo=True:显示创建sql信息
Base = declarative_base()  # 生成orm基类

#这里的继承Base的类,创建user表,字段id(整型,主键) name(列 字符串32位) 密码(列 字符串64位)
class User(Base):
    __tablename__ = 'user'  # 表名
    id = Column(Integer, primary_key=True)
    name = Column(String(32))
    password = Column(String(64))
Base.metadata.create_all(engine) #创建表结构 (这里是父类调子类)


运行结果:


方式二 创建表,并写入数据:


创建表:


from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String

engine = create_engine('mysql+pymysql://jacker:123456@192.168.1.48/sqlalchemy',encoding='utf-8')
metadata = MetaData(engine)

teacher = Table('user', metadata,
            Column('id', Integer, primary_key=True),
            Column('name', String(50), ),
            Column('fullname', Integer),
            Column('password', String(10)),
)
metadata.create_all(engine)


写入数据:


from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

engine = create_engine('mysql+pymysql://jacker:123456@192.168.1.48/sqlalchemy',encoding='utf-8')
#echo=True:显示信息
DBsession = sessionmaker(bind=engine)# 实例和engine绑定
session = DBsession()                 # 生成session实例,相当于游标

Base = declarative_base()# 生成orm基类

class User(Base):
    __tablename__ = 'user'
    id = Column(Integer, primary_key=True)
    name = Column(String(100))
    fullname = Column(String(100))
    password = Column(String(100))

#实例化操作
user1 = User(id=1001, name='ling', password=123)
user2 = User(id=1002, name='molin', password="123abc")
user3 = User(id=1003, name='karl', password=16)

#需要添加到session中,然后再提交,表里才可以有数据
session.add(user1)
session.add(user2)
session.add(user3)
session.commit()


验证:

数据查询


my_user=session.query(User).filter_by(name='molin').first()#显示匹配name=molin的第一条数据,因为name='molin' 可能有多个值
my = session.query(User).filter_by().all()                  #显示所有
print(my)                                                   #这个是个列表,通过循环遍历
for i in my:
    print(i.name)
    print(i.password)
print(my_user.id,my_user.password,my_user.name)             #调用
#session.commit()                                          #查询就不用提交了
session.close()


'''
filter和filter_by   条件查询

filter_by(name="ling")  不能使用>  <  =
filter(Student.id>1001)  这个就必须使用Student.id  可以使用> < =等
'''


a = session.query(User).filter(User.id>1002).all()
for i in a:
    print(i.name)
    print(i.password)
session.close()


如果出现name相同的,想都打印出来的话:
#实例化操作
user1 = User(id=1001, name='test1', password=123)
user2 = User(id=1002, name='test2', password="123abc")
user4 = User(id=1004, name='test2', password="123abc")
user3 = User(id=1003, name='test3', password=16)

my_user = session.query(User).filter_by(name="test2").all()       #my_user:这个是列表
for i in my_user:
    print(i.id)
    print(i.name)
    print(i.password)


多条件查询

objs = Session.query(User).filter(User.id>0).filter(User.id<7).all()

上面2个filter的关系相当于 user.id >1 AND user.id <7 的效果


修改数据


my_user = session.query(User).filter_by(name="molin").first()
my_user.name = "fenggf" # 查询出来之后直接赋值修改
my_user.passwork = "123qwe"
session.commit()

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注系统运维Linux频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved