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 ...
随机推荐
- 【AsyncTask整理 1】 AsyncTask几点要注意的地方
问题1:AsyncTask是多线程吗? 答:是. 问题2:AsyncTask与Handler相比,谁更轻量级? 答:通过看源码,发现AsyncTask实际上就是一个线程池,而网上的说法是AsyncTa ...
- Visual Studio 扩展包(.vsix)制作
前言:上篇介绍了 Visual Studio扩展工具添加与卸载,本编要介绍的是Visual Studio 扩展包(.vsix)的制作. 方法: ①.下载并安装Visual Studio 2010 SD ...
- 实例--post请求,完成一个抽奖程序概率的测试
一个web项目测试,测试抽奖概率的正确性,写了一个小代码,验证概率 post和get请求的一个工具类 package kankan_interface; import java.io.IOExcept ...
- 【转】jmeter 进行java request测试
本周使用jmeter进行一个远程dubbo接口的性能测试,因为没有访问页面,本来开发可以写一个页面,进行http请求的调用,不过已经看到jmeter可以直接对java request进行测试,所以尝试 ...
- Page.ClientScript.RegisterStartupScript
Page.ClientScript.RegisterStartupScript方法最初可用的选项之一就是使用一个可实现此功能的 .NET 类来注册脚本块. 第一个是 RegisterStartupSc ...
- springmvc的一个小例子学习(一)
个人觉得,学框架最好的 方法无外乎两个:一个是实践这个框架,真实的去用它,比如spring框架,先搭一个简单的spring项目,然后一步一步得去丰富它,从中学到spring框架的精髓和知识:另外一个就 ...
- C# 中怎么将string转换成int型
int intA = 0;1.intA =int.Parse(str);2.int.TryParse(str, out intA);3.intA = Convert.ToInt32(str);以上都可 ...
- UI5_UINavigation传值
// // AppDelegate.m // UI5_UINavigation传值 // // Created by zhangxueming on 15/7/7. // Copyright (c) ...
- 如何自学java迅速成为java高手
要想学好Java,首先要知道Java的大致分类.我们知道,自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ...
- maxlength属性在textarea里奇怪的表现
HTML5给表单带来了很多改变,比如今天要说的maxlength,这个属性可以限制输入框输入的最大字字符数,更方便的是对于粘贴的内容也能够根据字符数自动截断. 最近就接到这要一个需求,限制用户最多输入 ...