第三十九章:sqlalchemy操作

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

### 连接MySQL
engine = create_engine("mysql+pymysql://root:[email protected]:3306/db3?charset=utf8", max_overflow=5)

Base = declarative_base()

‘‘‘
create table  users(
    id int auto_increment primary key,
    name varchar(32) not null default ‘‘,
    extra varchar(32) not null default ‘‘
)
‘‘‘

‘‘‘
Usertype
id    title      xxoo
1     普通用户
row.xxoo : 多条记录对象
‘‘‘
class UserType(Base):
    __tablename__ = ‘usertype‘  ### 表名
    id = Column(Integer, autoincrement=True, primary_key=True)
    title = Column(String(32), nullable=False, server_default=‘‘)

‘‘‘
users
id     name   extra  type_id
1      zekai   nb      1
usertype = releationship(‘Usertype‘)
row.usertype
‘‘‘
class Users(Base):
    __tablename__ = ‘users‘
    id = Column(Integer, autoincrement=True, primary_key=True)
    name = Column(String(32), nullable=False, server_default=‘‘)
    extra = Column(String(32), nullable=False, server_default=‘‘)
    type_id = Column(Integer, ForeignKey(UserType.id))
    usertype = relationship(‘UserType‘, backref=‘xxoo‘)

__table_args__ = (
    #     UniqueConstraint(‘id‘, ‘name‘, name=‘uix_id_name‘),  ### 联合唯一索引
    #     Index(‘ix_name_extra‘, ‘name‘, ‘extra‘),  ### 组合索引
    )

def drop_db():
    Base.metadata.drop_all(engine)
def create_db():
    ## 会将当前执行文件中所有继承自Base类的类,生成表
    Base.metadata.create_all(engine)
# drop_db()
create_db()
###操作表中的数据

Session = sessionmaker(bind=engine)
session = Session()

### 增加一条数据
# obj = UserType(title=‘普通用户‘)
# session.add(obj)

### 添加多条数据
# session.add_all([
#     UserType(title=‘VIP用户‘),
#     UserType(title=‘VIP中P用户‘),
#     UserType(title=‘SVIP用户‘),
#     UserType(title=‘黑金用户‘)
# ])

### 查询
# ### 查询全部  返回的是一个列表, 列表中套对象
# res = session.query(UserType).all()
# for row in res:
#     print(row.id, row.name)

# ### 查询一条数据
# res = session.query(UserType).first()
# print(res)

### where条件
# res = session.query(UserType).filter(UserType.name==‘VIP用户‘, UserType.id==2).all()
# for row in res:
#     print(row.id, row.name)
# print(res[0].name, res[0].id)
# res = session.query(UserType).filter_by(name=‘VIP用户‘).all()
# print(res)

### 删除:
# session.query(UserType).filter(UserType.id>3).delete()

## 修改
# session.query(UserType).filter(UserType.id == 3).update({"name" : "SVIP用户"})

### MySQL 高级查询操作

#### 通配符  分组 分页 排序 between and in not in

### between ... and ...
# res = session.query(UserType).filter(UserType.id.between(1,3)).all()
# for row in res:
#     print(row.id, row.title)

### in 操作  bool_
# res = session.query(UserType).filter(UserType.id.in_([1,3,4])).all()
# print(res)

### not in
# select * from Usertype
# res = session.query(UserType).filter(~UserType.id.in_([1,3,4])).all()
# for row in res:
#     print(row.id, row.title)
#
# session.query(UserType).filter(Users.id.in_(session.query(Users.id).filter_by(name=‘eric‘))).all()
# res = session.query(UserType.title).filter(~UserType.id.in_([1,3,4])).all()
# for row in res:
#     print( row.title)

from sqlalchemy import and_, or_
### 通配符
# ret = session.query(UserType).all()

from sqlalchemy.sql import func
# res = session.query(
#     Users.type_id,
#     func.max(Users.id),
#     func.min(Users.id)).group_by(Users.type_id).all()
#
# print(res)
ret = session.query(
    func.max(Users.id),
    func.min(Users.id)).group_by(Users.type_id).having(func.min(Users.id) >2).all()

### left join

###1. 查询某一个用户的用户类型
### 第一种方法:
# res = session.query(Users,UserType).join(UserType, isouter=True).all()
# # print(res)
# for row in res:
#     print(row[0].id, row[0].name, row[1].title)

### 第二种方法
# res = session.query(Users).all()
# for row in res:
#     print(row.id, row.name, row.extra, row.usertype.title)

### 2. 某一个类型下面的用户
### 第一种方法
# res = session.query(UserType).all()
# for row in res:
#     print(row.id, row.title, session.query(Users).filter(Users.type_id == row.id).all() )

### 第二种方法
# res = session.query(UserType).all()
#
# for row in res:
#     print(row.id, row.title, row.xxoo)

  1. 1.查看数据库编码格式
  2.  

  3.  

    mysql> show variables like ‘character_set_database‘;

  4.  

  5.  

  6.  

    2.查看数据表的编码格式

  7.  

  8.  

    mysql> show create table <表名>;

  9.  

  10.  

  11.  

    3.创建数据库时指定数据库的字符集

  12.  

  13.  

    mysql>create database <数据库名> character set utf8;

  14.  

    4.创建数据表时指定数据表的编码格式

  15.  

  16.  

    create table tb_books (

  17.  

    name varchar(45) not null,

  18.  

    price double not null,

  19.  

    bookCount int not null,

  20.  

    author varchar(45) not null ) default charset = utf8;

  21.  

    5.修改数据库的编码格式

  22.  

  23.  

    mysql>alter database <数据库名> character set utf8;

  24.  

    6.修改数据表格编码格式

  25.  

  26.  

    mysql>alter table <表名> character set utf8;

  27.  

    7.修改字段编码格式

  28.  

  29.  

    mysql>alter table <表名> change <字段名> <字段名> <类型> character set utf8;

  30.  

  31.  

    mysql>alter table user change username username varchar(20) character set utf8 not null;

  32.  

    8.添加外键

  33.  

  34.  

    mysql>alter table tb_product add constraint fk_1 foreign key(factoryid) references tb_factory(factoryid);

  35.  

    mysql>alter table <表名> add constraint <外键名> foreign key<字段名> REFERENCES <外表表名><字段名>;

  36.  

    9.删除外键

  37.  

  38.  

    mysql>alter table tb_people drop foreign key fk_1;

  39.  

    mysql>alter table <表名> drop foreign key <外键名>;

原文地址:https://www.cnblogs.com/haojunliancheng/p/11047063.html

时间: 2024-10-16 12:30:06

第三十九章:sqlalchemy操作的相关文章

Gradle 1.12用户指南翻译——第三十九章. IDEA 插件

本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc 本文翻译所在分支: https://github.com/msdx/gradledoc/tree/1.12. 直接浏览双语版的文档请访问: http://gradledoc.qiniudn.com/1.12/userg

“全栈2019”Java第三十九章:构造函数、构造方法、构造器

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第三十九章:构造函数.构造方法.构造器 下一章 "全栈2019"Java第四十章:this关键字 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组&q

【WPF学习】第三十九章 理解形状

在WPF用户界面中,绘制2D图形内容的最简单方法是使用形状(shape)——专门用于表示简单的直线.椭圆.矩形以及多变形的一些类.从技术角度看,形状就是所谓的绘图图元(primitive).可组合这些基本元素来创建更复杂的图形. 关于WPF中形状的重要细节是,它们都继承自FrameworkElement类.因此,形状是元素.这样会带来许多重要的结果: 形状绘制自身.不需要管理无效的情况和绘图过程.例如,当移动内容.改变窗口尺寸或改变形状属性时,不需要手动重新绘制形状. 使用与其他元素相同的方式组

第三十九章 gitlab搭建与使用(docker版)

一.下载docker镜像 前提:docker引擎已经安装好. docker pull gitlab/gitlab-ce 二.启动应用 docker run -d -h gitlab.zhaojigang.com -p 80:80 -v /etc/gitlab/:/etc/gitlab/ -v /var/log/gitlab/:/var/log/gitlab/ -v /var/opt/gitlab/:/var/opt/gitlab/ --name gitlab docker.io/gitlab/g

第十九章 面向对象的工具

学习要点:1.OOP 的魔术方法2.类函数和对象函数3.OOP 的反射API PHP通过类和方法等语言结构支持面向对象编程.同时也通过对象相关的函数和内置类为面向对象提供广泛支持. 一.OOP的魔术方法 PHP引入了__autoload()内置方法来自动包含类文件.__autoload()应该被写成单个参数的方法.当PHP引擎遇到试图实例化未知类的操作时,会调用__autoload()方法,并将类名当作字符串参数传递给它. function __autoload($_className) { r

19.1 awk基础【第十九章 awk】

第十九章 awk 19.1 awk基础 本博文目录索引 [TOC] 一.初识awk (一)什么是awk? awk,全称:Aho Weinberger Kernighan 是一个报告生成器,用于格式化文本输出 (二)awk能做什么? 1.主要功能:格式化显示文档.或者打印报表 2.将给定的文本内容按照工程师想要的格式输出显示.或者打印成报表格式 3.日常用途:处理各种文档(比如日志信息),从中分析挖掘出工程师关心的必要数据,并且打印成报表 (三)CentOS7系统中的awk 1.gawk 在Cen

第十九章 文本处理流编辑器:awk编程

第十九章 文本处理流编辑器:awk编程 名词解释 awk 是一种编程语言,用于linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一个或多个文件.或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大个编程工具.它在命令行中使用,但更多是作为脚本来使用.awk有很多内建的功能,比如:数组.函数等,这是它和C语言的相同之处,灵活性是awk最大的优势. awk命令格式和选项 语法形式 awk [option] 'script'

第十九章

绝圣弃智,民利百倍:绝化弃虑,民复孝慈:绝巧弃利,盗贼无有.此三言也,以为文未足,故令有所属:见素保朴,少私而寡欲,绝学无忧. 绝圣弃智,民利百倍: 其实所谓“绝圣弃智”讲的是管理者,管理者“绝圣弃智”,老百姓就能够“民利百倍”,老百姓的收益就会很大,老百姓就会幸福很多.这“民利百倍”的意思就是说老百姓的利益就会多很多,多出百倍来.要求管理者尽量放弃追求这种虚华的名誉,因为没有必要,您做到就行了,但是不要把这些东西放到口头上,领导者一旦追求这些虚幻的名誉就坏了.比如好大喜功,对外说自己是圣人 绝

【WPF学习】第二十九章 元素绑定——将元素绑定到一起

原文:[WPF学习]第二十九章 元素绑定--将元素绑定到一起 数据banding的最简单情形是,源对象时WPF元素而且源属性是依赖性属性.前面章节解释过,依赖项属性具有内置的更改通知支持.因此,当在源对象中改变依赖项属性的值时,会立即更新目标对象中的绑定属性.这正是我们所需要的行为--而且不必为此构建任何额外的基础结构. 为理解如何将一个元素绑定到另一个元素,下面创建一个简单的示例.该示例窗口包含了两个控件:一个Slider控件和一个具有单行文本的TextBlock控件.如果向右拖动滑动条上的滑