SQLAlchemyの增删改查

用a*my写原味sql

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

Base = declarative_base()

# 创建单表
class Users(Base):
    __tablename__ = ‘users‘
    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(32))
    extra = Column(String(16))

# 数据库连接相关
engine = create_engine("mysql+pymysql://root:[email protected]:3306/day128?charset=utf8")

def init_db():
    # 创建表
    Base.metadata.create_all(engine)

def drop_db():
    # 删除表
    # Base.metadata.drop_all(engine)
    pass

if __name__ == ‘__main__‘:
    # drop_db()
    init_db()

models

from sqlalchemy import create_engine

engine = create_engine("mysql+pymysql://root:[email protected]:3306/day128?charset=utf8")
cur = engine.execute(‘SELECT * FROM users‘)
result = cur.fetchall()
print(result)

原味sql

用a*my写ORM增删改查

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, UniqueConstraint, Index, DateTime, ForeignKey
from sqlalchemy import create_engine
from sqlalchemy.orm import relationship
import datetime

Base = declarative_base()

class Classes(Base):
    __tablename__ = ‘classes‘
    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(32), nullable=False, unique=True)

class Student(Base):
    __tablename__ = ‘student‘
    id = Column(Integer, primary_key=True, autoincrement=True)
    username = Column(String(32), nullable=False, index=True)
    password = Column(String(64), nullable=False)
    ctime = Column(DateTime, default=datetime.datetime.now)
    class_id = Column(Integer, ForeignKey("classes.id"))
    # 关联字段     backref = 反向字段
    cls = relationship("Classes", backref=‘stus‘)

class Hobby(Base):
    __tablename__ = ‘hobby‘
    id = Column(Integer, primary_key=True)
    caption = Column(String(50), default=‘篮球‘)

class Student2Hobby(Base):
    __tablename__ = ‘student2hobby‘
    id = Column(Integer, primary_key=True, autoincrement=True)
    student_id = Column(Integer, ForeignKey(‘student.id‘))
    hobby_id = Column(Integer, ForeignKey(‘hobby.id‘))

    __table_args__ = (
        UniqueConstraint(‘student_id‘, ‘hobby_id‘, name=‘uix_student_id_hobby_id‘),
        # Index(‘ix_id_name‘, ‘name‘, ‘extra‘),
    )

def init_db():
    # 数据库连接相关
    engine = create_engine("mysql+pymysql://root:[email protected]:3306/day128?charset=utf8")
    # 创建表
    Base.metadata.create_all(engine)

def drop_db():
    engine = create_engine("mysql+pymysql://root:[email protected]:3306/day128?charset=utf8")
    # 删除表
    Base.metadata.drop_all(engine)

if __name__ == ‘__main__‘:
    # drop_db()
    init_db()

0.models

import models
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine

engine = create_engine("mysql+pymysql://root:[email protected]:3306/day128?charset=utf8")
XXXXXX = sessionmaker(bind=engine)
session = XXXXXX()

# 单条插入
# obj = models.Classes(name=‘第一期‘)
# session.add(obj)
# session.commit()

# 多条插入
# objs = [
#     models.Classes(name=‘第二期‘),
#     models.Classes(name=‘第三期‘),
#     models.Classes(name=‘第四期‘),
#     models.Classes(name=‘第五期‘),
# ]
#
# session.add_all(objs)
# session.commit()

session.close()

1.增

import models
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine

engine = create_engine("mysql+pymysql://root:[email protected]:3306/day128?charset=utf8")
session = sessionmaker(bind=engine)()

result = session.query(models.Classes).all()
for item in result:
    print(item.id,
          item.name)

session.close()

2.查

import models
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine

engine = create_engine("mysql+pymysql://root:[email protected]:3306/day128?charset=utf8")
session = sessionmaker(bind=engine)()

session.query(models.Classes).filter(models.Classes.id>4).delete()

session.commit()
session.close()

3.删

import models
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine

engine = create_engine("mysql+pymysql://root:[email protected]:3306/day128?charset=utf8")
session = sessionmaker(bind=engine)()

session.query(models.Classes).filter(models.Classes.id > 0).update({models.Classes.name: models.Classes.name + ‘666‘},
                                                                   synchronize_session=False)

session.commit()
session.close()

4.改

import models
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine,text

engine = create_engine("mysql+pymysql://root:[email protected]:3306/day128?charset=utf8")
session = sessionmaker(bind=engine)()

# 1 别名查询
result = session.query(models.Classes.id, models.Classes.name.label(‘xx‘)).all()    # label 起别名
for item in result:
    print(item.id, item.xx)

# 2. filter接表达式/filter_by接参数
r3 = session.query(models.Classes).filter(models.Classes.name == "anne").all()
r4 = session.query(models.Classes).filter_by(name=‘anne‘).all()

# 3. 子查询
result = session.query(models.Classes).from_statement(text("SELECT * FROM classes where name=:name")).params(name=‘ed‘).all()
result = session.query(models.Classes).from_statement(text("SELECT * FROM classes where name=:name")).params(name=‘ed‘)
# 子查询
ret = session.query(models.Classes).filter(models.Classes.id.in_(session.query(models.Classes.id).filter_by(name=‘eric‘))).all()
# 关联子查询
subqry = session.query(func.count(Server.id).label("sid")).filter(Server.id == Group.id).correlate(Group).as_scalar()
result = session.query(Group.name, subqry)

session.close()

5.子查询

import models
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine

engine = create_engine("mysql+pymysql://root:[email protected]:3306/day128?charset=utf8")
session = sessionmaker(bind=engine)()

1.在学生表中插入数据
obj = models.Student(username=‘anne‘, password=123, class_id=3)
obj = models.Student(username=‘bob‘, password=123, class_id=3)
obj = models.Student(username=‘fry‘, password=123, class_id=3)
session.add(obj)
session.commit()

2. 在学生表中找到anne
obj = session.query(models.Student).filter(models.Student.username==‘anne‘).first()
print(obj.id)

3. 找到所有学生,并打印信息
方法1
objs =session.query(models.Student).all()
for obj in objs:
    cls_obj = session.query(models.Classes).filter(models.Classes.id ==obj.class_id).first()
    print(obj.id,obj.username,obj.class_id,cls_obj.name)
方法2
objs = session.query(models.Student.id,
                     models.Student.username,
                     models.Classes.name).join(models.Classes,isouter=True).all()
print(objs)
方法3
objs = session.query(models.Student).all()
for item in objs:
    print(item.id, item.username, item.class_id, item.cls.name)

# 4. 第三期所有的学生
obj = session.query(models.Classes).filter(models.Classes.id == 3).first()
student_list = obj.stus  # 反向查询
for item in student_list:
    print(item.id, item.username)

session.close()

6.跨表

.

原文地址:https://www.cnblogs.com/iyouyue/p/8983163.html

时间: 2024-11-09 19:35:31

SQLAlchemyの增删改查的相关文章

SQLAlchemy 增删改查 一对多 多对多

安装介绍 创建 增删改查相关操作 高级版查询操作 高级版更新操作 扩展内容 安装介绍 - SQLAlchemy 是Python的一款Orm框架 创建 from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String #创建基类,相当于Django中的 models.Model,被各个数

SQLAlchemy增删改查 一对多 多对多

一.前言: Python的ORM框架SQLAlchemy有些人相信也听过这个框架的大名了,也听说了SQLAlchemy没有Django的Models好用 我这里辟谣一下:Models仅仅只是配置和使用比较简单,因为他是Django自带的ORM框架,也正是因为Django原生的,所以兼容性远远不如SQLAlchemy,真正算的上全面的ORM框架必然是我们SQLAlchemy ORM框架,它可以在 任何使用SQL查询时使用,当然了,无论是使用什么ORM框架,都是为了方便不熟练数据库的同志们使用的,我

偏于SQL语句的 sqlAlchemy 增删改查操作

ORM 江湖 曾几何时,程序员因为惧怕SQL而在开发的时候小心翼翼的写着sql,心中总是少不了恐慌,万一不小心sql语句出错,搞坏了数据库怎么办?又或者为了获取一些数据,什么内外左右连接,函数存储过程等等.毫无疑问,不搞懂这些,怎么都觉得变扭,说不定某天就跳进了坑里,叫天天不应,喊地地不答. ORM 的出现,让畏惧SQL的开发者,在坑里看见了爬出去的绳索,仿佛天空并不是那么黑暗,至少再暗,我们也有了眼睛.顾名思义,ORM 对象关系映射,简而言之,就是把数据库的一个个table(表),映射为编程语

SQlAlchemy的增删改查

SQLAlchemy的使用 1.创建数据表 # ORM中的数据表是什么呢? # Object Relation Mapping # Object - Table 通过 Object 去操纵数据表 # 从而引出了我们的第一步创建数据表 - 创建Object # 1. 创建Object # class User(object): # pass # 2. 让Object与数据表产生某种关系 也就是让Object与数据表格式极度相似 # 导入官宣基础模型(SQLAlchemy) from sqlalch

使用sqlalchemy对mysql进行增删改查

需求场景: 老大让我利用爬虫爬取的数据写到或更新到mysql数据库中,百度了两种方法,1 是使用pymysql连接mysql,通过操作原生的sql语句进行增删改查数据:2 是使用sqlalchemy连接mysql,通过ORM模型建表并操作数据库,不需要写原生的sql语句,相对简单些: 以下就是本次使用sqlalchemy的经验之谈. 实现流程:连接数据库>通过模型类创建表>建立会话>执行创建表语句>通过会话进行增删改查 from sqlalchemy import exists,

Python 模拟SQL对文件进行增删改查

1 #!/usr/bin/env python 2 # _*_ coding:UTF-8 _*_ 3 # __auth__: Dalhhin 4 # Python 3.5.2,Pycharm 2016.3.2 5 # 2017/05/15 6 7 import sys,os 8 9 def where(dbfile,where_list): #条件是一个list 10 11 def and_or_where(sub_where_list): 12 '''获取and或同时含有and.or关键字的条

【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建

数据库的创建和sql语句增删改查 1. 加载驱动. 2. 连接数据库. 3. 操作数据库. 创建表: create table person( _id integer primary key, name varchar(20), age integer ); 添加: insert into person(name, age) values('lisi', 19); 删除: delete from person where _id = 1; 修改: update person set name =

ssm框架搭建+easyui增删改查实现

闲来无事,看了看别人的博客文档也跟着敲了敲,特地记录下来,方便以后学习: spring版本:4.0.6 mybatis版本:3.2.5 所有jar包打包下载:http://pan.baidu.com/s/1qLEaU 1.项目目录结构 其中,controller包下存放控制层文件,dao下存放各个model类相关的数据库操作接口,entity下放置各种model类,mappers下放置各个dao对应的映射文件,service服务层就不说了,放置各种service接口,impl是其具体实现类. 2

【Android】Sqlite数据库增删改查

Android系统内置一个Sqlite数据库,如果app需要使用Sqlite数据库数据库存储数据,Android会为此app生成一个.db文件.这个数据库在data/data/<package_name>/databases里面,其中<package_name>为该安卓app的工程包名,这个目录必须root后才能看到.在Windows,单机的应用程序,存储数据,基本放到一个文件里面,正如游戏的存档,基本就是把当前的游戏状态存到一个用户很难找到的文件里面.每次存档读档就是一个从这个存