sqlalchemy - day1
一、Create engine
Database url规则: dialect+driver://username:password@host:port/database
echo: True表示cmd窗口显示出对应的SQL 脚本信息
from sqlalchemy import create_engine # Database url: dialect+driver://username:password@host:port/database
# eq: mysql+pymysql://purk:max123@local/test
# 在内存中创建一个sqllite
# engine = create_engine('sqlite:///:memory:', echo=True)
# F:/test.db 如果test.db不存在,则创建一个。
engine = create_engine('sqlite:///F:/test.db', echo=True)
二、create mapping class
from sqlalchemy import Column, Integer, String, Table
from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class Person(Base):
__tablename__ = 'person' id = Column(Integer, primary_key=True)
name = Column(String(50)) class User(Base):
__tablename__='user' id = Column(Integer, primary_key=True)
name = Column(String(50))
>>> Person.__table__
Table('person', MetaData(bind=None), Column('id', Integer(), table=<person>, primary_key=True, nullable=False), Column('name', String(length=50), table=<person>), schema=None) >>> Person.metadata is User.metadata
True >>> Person.metadata is Base.metadata
True
传统的mapper configuration 就不介绍了,因为不直观,而且代码量还长,下面只贴出官网的例子
from sqlalchemy import Table, MetaData, Column, Integer, String, ForeignKey
from sqlalchemy.orm import mapper
metadata = MetaData()
user = Table('user', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(50)),
Column('fullname', String(50)),
Column('password', String(12))
) class User(object): def __init__(self, name, fullname, password):
self.name = name
self.fullname = fullname
self.password = password
mapper(User, user)
三、Column
1. DataType
1) Integer
id = Column(Integer)
2) String
name = Column(String(50))
3) Boolean
gender = Column(Boolean)
person = Person(name='purk', gender=0)
person1 = Person(name='purk1', gender=11)
person2 = Person(name='purk2', gender=-1)
# try:
# person3 = Person(name='purk3', gender='123')
# except Exception as e:
# print('boolean类型在数据库中对应的smartint或boolean类型,输入字符串是不对的')
db.add_all([person, person1, person2])
db.commit()
结果如下
person_1 = db.query(Person).filter(Person.name == 'purk').first()
person_2 = db.query(Person).filter(Person.name == 'purk1').first()
person_3 = db.query(Person).filter(Person.name == 'purk2').first()
print(person_1.gender)
print(person_2.gender)
print(person_3.gender)
查询 结果如下,满足boolean类型的一贯判断,非0即1.
4) Date -> datetime.date()
赋值可以使用python的date对象,也可以直接使用日期的字符串'2016-10-21',不过从数据库里面取出来的结果集该字段一定是python的date类型,这样在json或xml序列化的时候会有问题。
birthday = Column(Date())
5) DateTime -> datetime.datetime() 同 Date.
create_date = Column(DateTime(), default=datetime.now) default: 默认值,相当于在为给定值时赋予的默认值
modify_date = Column(DateTime(), onupdate=datetime.now) onupdate:在每次update时默认赋予的值,注,如果该字段已经被赋值,则不会再用默认值
birthday = Column(Date())
create_date = Column(DateTime(), default=datetime.now)
modify_date = Column(DateTime(), onupdate=datetime.now) person = Person(name='purk', gender=True, level='')
person1 = Person(name='purk1', gender=False, level=0)
person2 = Person(name='purk2', gender=False, level=1)
person3 = Person(name='purk3', gender=False, level=4)
person4 = Person(name='purk4', gender=-1, level='medium')
db.add_all([person, person1, person2, person3, person4])
db.commit() db.query(Person).filter(Person.name == 'purk').update({Person.birthday: date.today()})
person_1 = db.query(Person).filter(Person.name == 'purk1').first()
person_1.birthday = '2016-10-27'
person_1.modify_date = '2016-10-27 15:00:05' #update时给定值
db.merge(person_1)
db.commit()
结果如下
6) Enum
level_list = ('low', 'medium', 'high')
level = Column(Enum(*level_list))
person = Person(name='purk', gender=True, level='')
person1 = Person(name='purk1', gender=False, level=0)
person2 = Person(name='purk2', gender=False, level=1)
person3 = Person(name='purk3', gender=False, level=4)
person4 = Person(name='purk4', gender=-1, level='medium')
Enum的index是从1开始的,越界的或者值不在枚举列中的都保存为null了
7)Float
menoy = Column(Float())
8) Unicode
data = Column(Unicode(200)) #目前测试的是Unicode 和String是一样样的,值得注意的是这两类型赋值可以是Byte类型的。
name = Column(String(50))
data = Column(Unicode(200)) person = Person(name='purk撒旦法撒旦法'.encode(), gender=True, level='', data='asdf123')
person1 = Person(name='purk1', gender=False, level=0, data='asdf123是打发斯蒂芬'.encode()) person_1 = db.query(Person).filter(Person.name == 'purk1').first()
print(person_1.data)
结果是
主要且常用的type我总结了一下,不常用的和我没研究懂得就pass咯。。。
sqlalchemy - day1的更多相关文章
- sqlalchemy学习
sqlalchemy官网API参考 原文作为一个Pythoner,不会SQLAlchemy都不好意思跟同行打招呼! #作者:笑虎 #链接:https://zhuanlan.zhihu.com/p/23 ...
- tornado+sqlalchemy+celery,数据库连接消耗在哪里
随着公司业务的发展,网站的日活数也逐渐增多,以前只需要考虑将所需要的功能实现就行了,当日活越来越大的时候,就需要考虑对服务器的资源使用消耗情况有一个清楚的认知. 最近老是发现数据库的连接数如果 ...
- 冰冻三尺非一日之寒-mysql(orm/sqlalchemy)
第十二章 mysql ORM介绍 2.sqlalchemy基本使用 ORM介绍: orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似pyt ...
- Python 【第六章】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- SQLAlchemy(一)
说明 SQLAlchemy只是一个翻译的过程,我们通过类来操作数据库,他会将我们的对应数据转换成SQL语句. 运用ORM创建表 #!/usr/bin/env python #! -*- coding: ...
- NOIp2016 Day1&Day2 解题报告
Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...
- sqlalchemy(二)高级用法
sqlalchemy(二)高级用法 本文将介绍sqlalchemy的高级用法. 外键以及relationship 首先创建数据库,在这里一个user对应多个address,因此需要在address上增 ...
- sqlalchemy(一)基本操作
sqlalchemy(一)基本操作 sqlalchemy采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型. 安装 需要安装MySQLdb pip install ...
- python SQLAlchemy
这里我们记录几个python SQLAlchemy的使用例子: 如何对一个字段进行自增操作 user = session.query(User).with_lockmode('update').get ...
随机推荐
- [xPlugins] 开发中常用富文本编辑器介绍
富文本编辑器学习,常见富文本编辑器有: CKeditor(FCkeditor).UEditor(百度推出的).NicEdit.KindEditor CKEditor 即 FCKEditor FCKed ...
- JS实现滚动条滚到页面距离底部300px时执行事件的方法
scrollTop为滚动条在Y轴上的滚动距离. clientHeight为内容可视区域的高度. scrollHeight为内容可视区域的高度加上溢出(滚动)的距离 $(window).scroll(f ...
- foundation框架之反射机制
概念 例子 一.概念 反射:根据字符串实例话对象或者调用方法 // // main.m // 反射机制 // // Created by apple on 14-3-28. // Copyright ...
- OC之protocol监听器的实现
画图 图解 代码 总结 一.画图 本人画了一个图(字体和画图水平请忽略) 二.图解 1.首先我们上边是一个按钮的类,按钮当中包括了一条线,这个线是什么呢? 其实难理解就难理解到这条线上了 1⃣️这条线 ...
- TQ210开发板NFS挂载android4.0.4的rootfs的方法
首先声明的是,我使用的u-boot是自己移植的u-boot2013.01.01而非天嵌官方的那个,至于使用官方的u-boot如何去实现nfs挂载rootfs我没怎么研究过,不过原理方法都是一致的. 主 ...
- Oracle基础 (十二)数学函数
数学函数: ABS(n):求绝对值 ),) FROM DUAL; --获取15的绝对值 结果:, BITAND(X,Y):返回X,Y进行位与(AND)的运算结果 ,), BITAND(,), BITA ...
- hdu 4714 Tree2cycle 树形经典问题
发现今天没怎么做题,于是随便写了今天杭电热身赛的一题. 题目:给出一棵树,删边和添边的费用都是1,问如何删掉一些树边添加一些树边,使得树变成一个环. 分析:统计树的分支数.大概有两种做法: 1.直接d ...
- 转: 58同城高性能移动Push推送平台架构演进之路
转: http://geek.csdn.net/news/detail/58738 文/孙玄 本文详细讲述58同城高性能移动Push推送平台架构演进的三个阶段,并介绍了什么是移动Push推送,为什么需 ...
- 学习Slim Framework for PHP v3 (五)--route怎么被调用的?
上一篇中分析了get()如何加入新的route的,这篇来分析route是如何被调用的. 首先,route是在routers里保存,router有在container中存放.container提供了ge ...
- SQL语句新建表,同时添加主键、索引、约束
SQL语句新建数据表 主键,索引,约束 CREATE TABLE [dbo].[T_SendInsideMessageRec]( [SendInsideMID] [uniqueidentifier ...