sqlalchemy精华版

上一篇主要粗略讲了Flask+mysql+sqlalchemy的使用,这次精讲下sqlalchemy的用法,话不多说,上代码。

----------sqlalchemy_test.py

# -*- coding: utf-8 -*-
# Flask hello world
##链接数据库 mysql
from sqlalchemy import *
from sqlalchemy.orm import scoped_session, sessionmaker
###连接数据库
db_connect_string = ‘mysql://root:[email protected]:3306/flask?charset=utf8‘
ssl_args = {‘ssl‘:{‘cert‘:‘/home//ssl/client-cert.pem‘,
                  ‘key‘:‘/home/shouse/ssl/client-key.pem‘,
                  ‘ca‘:‘/home/shouse/ssl/ca-cert.pem‘}
            }
engine = create_engine(db_connect_string, connect_args =ssl_args)
SessionType = scoped_session(sessionmaker(bind=engine, expire_on_commit=False))

###构建连接数据库函数
def get_session():
    return SessionType
####创建自动事务函数
from contextlib import contextmanager
@contextmanager
def session_scope():
    session = get_session()
    try:
        yield session
        session.commit()
    except:
        session.rollback()
        raise
    finally:
        session.close()
####开始进行数据库操作
#
#
#
#
‘‘‘
class db_admin():
    # 表的名字:
    __tablename__ = ‘db_admin‘
    # 表的结构:
    id = Column(Integer, primary_key=True)
    name = Column(String(255))
    pwd = Column(String(255))
    power = Column(String(20))
    date = Column(Date())
‘‘‘
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

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

__table_args__ = (
        UniqueConstraint(‘id‘, ‘name‘, name=‘uix_id_name‘),
        Index(‘ix_id_name‘, ‘name‘, ‘extra‘),
)

class Address(Base):
    __tablename__ = ‘address‘
    id = Column(Integer, primary_key=True)
    address = Column(String(32))
    user_id = Column(Integer, ForeignKey(‘users.id‘))

###添加示例
‘‘‘
obj = Users(name="alex0", extra=‘sb‘)
session.add(obj)
session.add_all([
    Users(name="alex1", extra=‘sb‘),
    Users(name="alex2", extra=‘sb‘),
])
‘‘‘
###创建表
Base.metadata.create_all(engine)
#添加一条数据
def insert(name, fullname):
    with session_scope() as session:
        insert_data = Users(name = name, extra = fullname)
        session.add(insert_data)
#添加多条数据
def insert_data(data):
    with session_scope() as session:
        session.add_all(data)
if __name__ == ‘__main__‘:
    #insert(‘taotao11‘, ‘kk‘)
    ‘‘‘
    data = [m
            Users(name = ‘xx‘, extra = ‘111‘),
            Users(name = ‘xxxx‘, extra = ‘xx3131‘),
        ]
    insert_data(data)
    ‘‘‘
####查询数据
with session_scope() as session:
    ###查询所有
    #list = session.query(Users).filter()
    ###查询==  !=
    #list = session.query(Users).filter(Users.name==‘xx‘)
    ##list = session.query(Users).filter(Users.name!=‘xx‘)
    ###like 模糊查询
    #list = session.query(Users).filter(Users.name.like(‘%tao%‘))
    ##过滤器in_
    #list = session.query(Users).filter(Users.id.in_([1,3,5,7]))
    ##查询空值
    #list = session.query(Users).filter(Users.name == None)
    #list = session.query(Users).filter(Users.name.is_(None))
    ##非逻辑 在前面加上~
    ##list = session.query(Users).filter(~Users.id.in_([1,3,5,7]))
    ####多条件查询  3种方法
    #并列条件
    #list = session.query(Users).filter(Users.name == ‘xx‘, Users.id>1)
    ##and_方法
    #list = session.query(Users).filter(and_(Users.name == ‘xx‘, Users.id>1))
    ###多个filter
    #list  =session.query(Users).filter(Users.name == ‘xx‘).filter(Users.id>1)
    #####单一条件并列or_
    #list = session.query(Users).filter(or_(Users.name == ‘xx‘, Users.extra==‘kk‘))
    ####执行原生sql
    #list  = session.execute(‘select * from Users‘)
    ‘‘‘
    for v in list:
        print v.id, v.extra, v.name
    ‘‘‘

原文地址:https://www.cnblogs.com/shuangzikun/p/taotao_sql_sqlalchemy.html

时间: 2024-11-02 19:24:13

sqlalchemy精华版的相关文章

Sublime Text 3 快捷键精华版

Sublime Text 3 快捷键精华版 Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctrl+G:跳转到第几行Ctrl+W:关闭当前打开文件Ctrl+Shift+W:关闭所有打开文件Ctrl+Shift+V:粘贴并格式化Ctrl+D:选择单词,重复可增加选择下一个相同的单词Ctrl+L:选择行,重复可依次增加选择下一行Ctrl+Shift+L:选择多行Ctrl+Shift+Enter:在当前行前插入新行Ctrl+X:删除当前行Ctrl+M:跳转到对应括号Ctrl+U:

【知识学习】Sublime Text 快捷键精华版

1 Sublime Text 3 快捷键精华版 2 Ctrl+Shift+P:打开命令面板 3 Ctrl+P:搜索项目中的文件 4 Ctrl+G:跳转到第几行 5 Ctrl+W:关闭当前打开文件 6 Ctrl+Shift+W:关闭所有打开文件 7 Ctrl+Shift+V:粘贴并格式化 8 Ctrl+D:选择单词,重复可增加选择下一个相同的单词 9 Ctrl+L:选择行,重复可依次增加选择下一行 10 Ctrl+Shift+L:选择多行 11 Ctrl+Shift+Enter:在当前行前插入新行

一看就懂的ReactJs入门教程(精华版)

现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领略ReactJS的风采吧~~ 章有点长,耐心读完,你会有很大收获哦~ 一.ReactJS简介 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用

getline函数(精华版)

在我的印象中,getline函数经常出现在自己的视野里,模糊地记得它经常用来读取字符串 .但是又对它的参数不是很了解,今天又用到了getline函数,现在来细细地总结一下: 首先要明白设计getline函数的目的,其实很简单,就是从流中读取字符串.而且读取的方 式有很多,包括根据限定符,根据已读取的字符的个数.从这个函数的名称来看,它的直观 意义是从流中读取一行,但是大家不要被这表面的现象所迷惑.其实如果让我来为这个函数 去一个名字的话,或许我会取一个getString,因为它的目的本来就是从流

传智播客_2015年Java基础视频-深入浅出精华版 笔记(2015年9月14日23:11:11)

本笔记是个人笔记+摘录笔记相结合,非完全原创 day01 win 7系统打开DOS有趣方法:按住shift+右键,单击“在此处打开命令窗口”(注意:在此处可以是任何的文件夹,不一定是桌面) 用DOS删除的文件不可以在回收站恢复?!! 常用DOS命令d: 回车 盘符切换dir(directory):列出当前目录下的文件以及文件夹md (make directory) : 创建目录(创建文件夹)rd (remove directory): 删除目录(删除文件夹,注意:前提是文件夹必须是空的!!)如果

《高效能人士的七个习惯-精华版》读书摘录

1.表面的言行终究掩饰不住其背后的信息. 2.承认自己无知往往是求知的第一步. 3.只有先信守对自己的承诺,才能信守对他人的承诺. 4.人的行为总是一再重复.因此卓越不是单一的举动,而是习惯. 5.思想决定行动,行动决定习惯,习惯决定品德,品德决定命运. 习惯一 积极主动 1.影响圈的核心就是作出承诺和信守承诺的能力.积极主动的本质和最明白的表现就是对自己或别人有所承诺,然后从不食言. 2.两种能够直接掌控人生的途径:一是做出承诺并信守承诺:二是确立目标,并付诸实践.即便只是承诺一件小事,只要有

gdal读写图像分块处理(精华版)

一.gdal进行数据操作在安装好gdal后,即可调用gdal库中的函数.(需要包含的头文件:gdal_priv.h)1.打开数据集使用gdal库进行数据(影像)操作的第一步就是打开一个数据集.对于“数据集”这个名词大家可能不会太习惯,但是对于一般的格式来说,一个“数据集”就是一个文件,比如一个TIFF文件就是一个以tiff为扩展名的文件.但是对于众多RS数据来说,一个数据集包含的绝对不仅仅是一个文件.对于很多RS数据,他们把一张图像分成数个图像文件,然后放在一个文件夹中,用一些额外的文件来组织它

传智播客 2015年 刘意_Java基础视频-深入浅出精华版 笔记(day21~)(2016年3月26日01:10:44)

day21 1.编码表概述和常见编码表 计算机只能识别二进制数据,早期由来是电信号. 为了方便应用计算机,让它可以识别各个国家的文字. 就将各个国家的文字用数字来表示,并一一对应,形成一张表. ASCII:美国标准信息交换码. 用一个字节的7位可以表示. ISO8859-1:拉丁码表.欧洲码表 用一个字节的8位表示. GB2312:中国的中文编码表. GBK:中国的中文编码表升级,融合了更多的中文文字符号. GB18030:GBK的取代版本 BIG-5码 :通行于台湾.香港地区的一个繁体字编码方

Android初级到高级指南(精华版)

经常有网友问我Android怎么入门怎么开始学习,今晚特地花时间整理出了Android的完整学习路线图,希望对大家有帮助. 杨光福IT讲师微博:http://weibo.com/321chinavideo