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增删改查的更多相关文章

  1. SQLAlchemy 增删改查 一对多 多对多

    1.创建数据表 # ORM中的数据表是什么呢? # Object Relation Mapping # Object - Table 通过 Object 去操纵数据表 # 从而引出了我们的第一步创建数 ...

  2. SQLAlchemyの增删改查

    用a*my写原味sql from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, I ...

  3. 13,SQLAlchemy 增删改查 一对多 多对多

    今天来聊一聊 Python 的 ORM 框架 SQLAlchemy Models 是配置和使用比较简单,因为他是Django自带的ORM框架,也正是因为是Django原生的,所以兼容性远远不如SQLA ...

  4. SQLAlchemy 增删改查 一对一 多对多

    首先要导入SQLAIchemy模块 from sqlalchemy.ect.declaative import declarative_base 创建orm基类 Base = declarative_ ...

  5. SQLAlchemy增删改查基本操作,及SQL基本技能样码(join,group)

    练了一天,基本的东东应该有感觉了. #coding=utf-8 from datetime import datetime from sqlalchemy import (MetaData, Tabl ...

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

    ORM 江湖 曾几何时,程序员因为惧怕SQL而在开发的时候小心翼翼的写着sql,心中总是少不了恐慌,万一不小心sql语句出错,搞坏了数据库怎么办?又或者为了获取一些数据,什么内外左右连接,函数存储过程 ...

  7. SQLAlchemy表操作和增删改查

    一.SQLAlchemy介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数 ...

  8. SQLAlchemy的使用---增删改查

    #通过SQLAlchemy对数据库进行增删改查 # 想要操作数据库 先要打开数据库连接 from create_table import engine # 创建会话 - 打开数据库连接 from sq ...

  9. sqlalchemy基本的增删改查

    #encoding: utf-8 from sqlalchemy import create_engine,Column,Integer,String from sqlalchemy.ext.decl ...

随机推荐

  1. Hive 导入 parquet 格式数据

    Hive 导入 parquet 数据步骤如下: 查看 parquet 文件的格式 构造建表语句 倒入数据 一.查看 parquet 内容和结构 下载地址 社区工具 GitHub 地址 命令 查看结构: ...

  2. String str=null; 和String str=""的区别

    1.最大的区别在于String str=null没有分配内存,String str=""分配了内存 2.String str=null   这个引用指向了一个null ,没有地址没 ...

  3. Chapter 5 Blood Type——3

    Disappointment flooded through me as my eyes unerringly focused on his table. 当我的眼睛完全集中在他的桌上时,失望如洪水般 ...

  4. NSCTF web200

    Topic Link http://ctf5.shiyanbar.com/web/web200.jpg 1) 分析代码可知a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQ ...

  5. leetcode — populating-next-right-pointers-in-each-node

    /** * * Source : https://oj.leetcode.com/problems/populating-next-right-pointers-in-each-node/ * Sou ...

  6. linux下sh脚本/bin/bash^M问题解决

    如果是在windows下编辑的脚本,到了linux下运行时会报出这样的错误/bin/bash^M:bad interpreter: No such file or directory这时因为编码的问题 ...

  7. hadoop 1.0.1集群安装及配置

    1.hadoop下载地址:http://www.apache.org/dyn/closer.cgi/hadoop/core/ 2.下载java6软件包,分别在三台安装 3.三台虚拟机,一台作为mast ...

  8. CAN总线学习记录之三:总线中主动错误和被动错误的通俗解释

    首先建议把广泛使用的"主动错误"和"被动错误"概念换成"主动报错"和"被动报错". 1. 主动报错站点 只要检查到错误, ...

  9. 第17章 社区快速入门和模板 - Identity Server 4 中文文档(v1.0.0)

    IdentityServer组织不维护这些示例.IdentityServer组织愉快地链接到社区模板,但不能对模板做出任何保证.请直接与作者联系. 17.1 各种ASP.NET核心安全样本 https ...

  10. @Html.DropDownListFor 下拉框绑定(选择默认值)

    首先先构建绑定下拉框的数据源 private void GetSalesList() { var userList = _rmaExpressAppService.GetUserList(); Tem ...