SQLAlchemy增删改查
sqlalchemy中让MySQL支持中文字符
engine = create_engine("mysql+pymysql://root:mysql8@localhost/mysqltest?charset=utf8", encoding='utf-8')
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
from sqlalchemy import func # 建立连接。通过pymysql执行原生SQL,加echo打印出信息,不加就不打印
engine = create_engine("mysql+pymysql://root:mysql8@localhost/mysqltest",
encoding='utf-8',) #echo=True)
# 生成ORM基类
Base = declarative_base()
# 表对象继承基类
class User(Base):
__tablename__ = 'user' # 表名
id = Column(Integer, primary_key=True)
name = Column(String(32))
password = Column(String(64))
def __repr__(self):
return "<id:%s name:%s> " % (self.id, self.name)
# 创建表结构,创建每个表都继承这个类。一执行可以把所有都创建完
Base.metadata.create_all(engine)
'''
表创建完了,现在来创建一条数据
'''
# 创建与数据库的Session_class类
Session_class = sessionmaker(bind=engine)
# 生成session实例,类似于cursor
session = Session_class()
# 生成要创建的数据对象
user_obj = User(name="alex", password="alex3714")
user_obj1 = User(name="jack", password="jack1234")
print(user_obj.name,user_obj.password, user_obj.id)
# 加入到session
session.add(user_obj)
session.add(user_obj1)
print(user_obj.name, user_obj.password, user_obj.id)
# 提交,创建数据
session.commit()
print(user_obj.name, user_obj.password, user_obj.id) '''
现在查询name="alex"的所有数据放在对象列表,
打印的地址,加个repr方法可以打印格式化数据
filter_by和filter随便,哪个管用就哪个
'''
data = session.query(User).filter_by(name="alex").filter_by(id=1).all()
print(data)
'''
修改
'''
data[0].name = "Alex Li"
data[0].password = ""
session.commit()
print(session.query(User).filter_by(id=1).all())
# '''
# 回滚
# '''
# fake_user = User(name='Rain', password='12345')
# session.add(fake_user)
# # 这时看session里有你刚添加和修改的数据
# print(session.query(User).filter(User.name.in_(['Jack', 'rain'])).all())
# # 此时你rollback一下
# session.rollback()
# # 再查就发现刚才添加的数据没有了。
# print(session.query(User).filter(User.name.in_(['Jack', 'rain'])).all())
# # Session
# # Session.commit()
'''
统计
'''
count = session.query(User).filter(User.id>0).count()
print(count)
'''
分组,统计每个名字出现的次数
'''
result = session.query(User.name, func.count(User.name)).group_by(User.name).all()
print(result)
'''
删除数据
'''
session.delete(session.query(User).filter_by(id=1).first())
session.commit()
print(session.query(User).all()) '''打印结果:
alex alex3714 None
alex alex3714 None
alex alex3714 1
[<id:1 name:alex> ]
[<id:1 name:Alex Li> ]
2
[('Alex Li', 1), ('jack', 1)]
[<id:2 name:jack> ]
'''
SQLAlchemy增删改查的更多相关文章
- SQLAlchemy 增删改查 一对多 多对多
1.创建数据表 # ORM中的数据表是什么呢? # Object Relation Mapping # Object - Table 通过 Object 去操纵数据表 # 从而引出了我们的第一步创建数 ...
- SQLAlchemyの增删改查
用a*my写原味sql from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, I ...
- 13,SQLAlchemy 增删改查 一对多 多对多
今天来聊一聊 Python 的 ORM 框架 SQLAlchemy Models 是配置和使用比较简单,因为他是Django自带的ORM框架,也正是因为是Django原生的,所以兼容性远远不如SQLA ...
- SQLAlchemy 增删改查 一对一 多对多
首先要导入SQLAIchemy模块 from sqlalchemy.ect.declaative import declarative_base 创建orm基类 Base = declarative_ ...
- SQLAlchemy增删改查基本操作,及SQL基本技能样码(join,group)
练了一天,基本的东东应该有感觉了. #coding=utf-8 from datetime import datetime from sqlalchemy import (MetaData, Tabl ...
- 偏于SQL语句的 sqlAlchemy 增删改查操作
ORM 江湖 曾几何时,程序员因为惧怕SQL而在开发的时候小心翼翼的写着sql,心中总是少不了恐慌,万一不小心sql语句出错,搞坏了数据库怎么办?又或者为了获取一些数据,什么内外左右连接,函数存储过程 ...
- SQLAlchemy表操作和增删改查
一.SQLAlchemy介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数 ...
- SQLAlchemy的使用---增删改查
#通过SQLAlchemy对数据库进行增删改查 # 想要操作数据库 先要打开数据库连接 from create_table import engine # 创建会话 - 打开数据库连接 from sq ...
- sqlalchemy基本的增删改查
#encoding: utf-8 from sqlalchemy import create_engine,Column,Integer,String from sqlalchemy.ext.decl ...
随机推荐
- SpringBoot+MyBatis+MySQL读写分离
1. 引言 读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行,至于谁来做选择数据库这件事儿,无非两个,要么中间件帮我们做,要么程序自己做.因此,一般来讲,读写分离有两种实现方式.第一种是依 ...
- 深入理解Mybatis插件开发
背景 关于Mybatis插件,大部分人都知道,也都使用过,但很多时候,我们仅仅是停留在表面上,知道Mybatis插件可以在DAO层进行拦截,如打印执行的SQL语句日志,做一些权限控制,分页等功能:但对 ...
- 阿里云Ubuntu安装图形界面与中文语言包
图形界面: http://blog.csdn.net/qq_37608398/article/details/78155568?locationNum=9&fps=1 安装中文: http:/ ...
- Config非对称加解密
对称加密和非对称加密区别1. 对称加密对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密.对称加密只有一个秘钥,作为私钥. 常见的对称加密算法:DES,AES,3DES等等. 2. 非对称加密 ...
- [六]JavaIO之 ByteArrayInputStream与ByteArrayOutputStream
功能简介 ByteArrayInputStream 和 ByteArrayOutputStream 提供了针对于字符数组 byte [] 的标准的IO操作方式 ByteArrayInp ...
- Linux之数据库操作
一.mysql基本操作 ,连接数据库 mysql -u root -p -h 127.0.0.1 mysql -u root -p -h 192.168.12.56 ,授予远程连接的权限 grant ...
- LeetCode数组解题模板
一.模板以及题目分类 1.头尾指针向中间逼近 ; ; while (pos1<pos2) { //判断条件 //pos更改条件 if (nums[pos1]<nums[pos2]) pos ...
- DSAPI多功能组件编程应用-文件类
[DSAPI.DLL下载地址] 本节内容,是属于"无需过多说明"就能使用的功能.由于实在是太简单,我就简单地示例一下. DSAPI.文件类.获取可读性强的字节大小信息(&q ...
- static 静态与非静态的区别
静态属性是共享一块内存空间.实例的是各自独享一块内存空间. 比如同一个name属性.如果是实例成员.那么你每创建了一个对象.赋给name值.假如创建了2个对象.第一个赋值张三.第2个赋值李四.它们就分 ...
- 【Java】数组转List常见方式的对比
一.最常用通过 Arrays.asList(strArray) 方式,将数组转换List后,不能对List增删,只能查改,否则抛异常. 关键代码: List list = Arrays.asList( ...