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 ...
随机推荐
- 【阿里云产品评测】小站长眼中的巅峰云PK
[阿里云产品评测]小站长眼中的巅峰云PK 阿里云论坛用户:昵称-a5lianmeng 笔者是一名小站长,因狂热互联网,而在毕业后由宅男逐渐进入站长队伍,在毕业后的几年间,经营6个流量类网站,身为站长, ...
- (一)u-boot2013.01.01 for TQ210:《Uboot简介》
一直想写一个s5pv210硬件平台的u-boot的移植文档,但一直都忙着没时间写.先写一些u-boot的脚本分析吧,包括makefile,mkconfig,config.mk,主要侧重于语法句意的分析 ...
- LRU算法实现
JDK中的实现 在JDK中LinkedHashMap可以作为LRU算法以及插入顺序的实现,LinkedHashMap继承自HashMap,底层结合hash表和双向链表,元素的插入和查询等操作通过计算h ...
- c#入门实例
1.概述 C#是一个语言,.net是一个平台,上面支持用C#或者VB.Net写代码 2.注释 若注释量较少用 // 开头,大量用 /* */ 表示 输出结果 3.命名空间 所谓n ...
- 算法java(Robert Sedgewick)基本API-StdOut.java
/************************************************************************* * Compilation: javac StdO ...
- Python图片处理PIL/pillow/生成验证码/出现KeyError: 和The _imagingft C module is not installed
最近在用Python开发自己的博客,需要用到Python生成验证码,当然肯定要用到Python的图形处理库PIL,因为我用的是windows. 所以在安装好pil之后就开始写,就按照题目所说出现了Th ...
- Cannot find protocol declaration for "XXDelegate" 找不到协议错误
原因是 在A里面继承了B类里面的"XXDelegate",在B类的头文件里又导入了A类的头文件 解决方法 不在B类的头文件导入A类的头文件,改成在B类的.m文件导入A类的头文件
- 如何下载免费英特尔® 实感™ SDK
英特尔® 实感™ SDK支持的用途包括手/指跟踪.面部分析.语音识别和合成.背景分段.增强现实性等等,给你带来全新的人机交互体验.还不赶紧跟着我们一起免费下载英特尔® 实感™ SDK吧! 1. 输入网 ...
- 使用wordpress自带ajax方法
css3 提示只适用于高级浏览器: ChromeFirefoxSafariIE9+ valid.invalid.required的定义 代码如下 复制代码 input:required, input: ...
- 基于python yield机制的异步操作同步化编程模型
又一个milestone即将结束,有了些许的时间总结研发过程中的点滴心得,今天总结下如何在编写python代码时对异步操作进行同步化模拟,从而提高代码的可读性和可扩展性. 游戏引擎一般都采用分布式框架 ...