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 ...
随机推荐
- Hive 导入 parquet 格式数据
Hive 导入 parquet 数据步骤如下: 查看 parquet 文件的格式 构造建表语句 倒入数据 一.查看 parquet 内容和结构 下载地址 社区工具 GitHub 地址 命令 查看结构: ...
- String str=null; 和String str=""的区别
1.最大的区别在于String str=null没有分配内存,String str=""分配了内存 2.String str=null 这个引用指向了一个null ,没有地址没 ...
- Chapter 5 Blood Type——3
Disappointment flooded through me as my eyes unerringly focused on his table. 当我的眼睛完全集中在他的桌上时,失望如洪水般 ...
- NSCTF web200
Topic Link http://ctf5.shiyanbar.com/web/web200.jpg 1) 分析代码可知a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQ ...
- leetcode — populating-next-right-pointers-in-each-node
/** * * Source : https://oj.leetcode.com/problems/populating-next-right-pointers-in-each-node/ * Sou ...
- linux下sh脚本/bin/bash^M问题解决
如果是在windows下编辑的脚本,到了linux下运行时会报出这样的错误/bin/bash^M:bad interpreter: No such file or directory这时因为编码的问题 ...
- hadoop 1.0.1集群安装及配置
1.hadoop下载地址:http://www.apache.org/dyn/closer.cgi/hadoop/core/ 2.下载java6软件包,分别在三台安装 3.三台虚拟机,一台作为mast ...
- CAN总线学习记录之三:总线中主动错误和被动错误的通俗解释
首先建议把广泛使用的"主动错误"和"被动错误"概念换成"主动报错"和"被动报错". 1. 主动报错站点 只要检查到错误, ...
- 第17章 社区快速入门和模板 - Identity Server 4 中文文档(v1.0.0)
IdentityServer组织不维护这些示例.IdentityServer组织愉快地链接到社区模板,但不能对模板做出任何保证.请直接与作者联系. 17.1 各种ASP.NET核心安全样本 https ...
- @Html.DropDownListFor 下拉框绑定(选择默认值)
首先先构建绑定下拉框的数据源 private void GetSalesList() { var userList = _rmaExpressAppService.GetUserList(); Tem ...