sqlalchemy - day1

一、Create engine

    Database url规则: dialect+driver://username:[email protected]:port/database

    echo: True表示cmd窗口显示出对应的SQL 脚本信息

1 from sqlalchemy import create_engine
2
3 # Database url: dialect+driver://username:[email protected]:port/database
4 # eq: mysql+pymysql://purk:[email protected]/test
5 # 在内存中创建一个sqllite
6 # engine = create_engine(‘sqlite:///:memory:‘, echo=True)
7 # F:/test.db 如果test.db不存在,则创建一个。
8 engine = create_engine(‘sqlite:///F:/test.db‘, echo=True)

二、create mapping class

 1 from sqlalchemy import Column, Integer, String, Table
 2 from sqlalchemy.ext.declarative import declarative_base
 3
 4 Base = declarative_base()
 5
 6
 7 class Person(Base):
 8     __tablename__ = ‘person‘
 9
10     id = Column(Integer, primary_key=True)
11     name = Column(String(50))
12
13 class User(Base):
14     __tablename__=‘user‘
15
16     id = Column(Integer, primary_key=True)
17     name = Column(String(50))
1 >>> Person.__table__
2 Table(‘person‘, MetaData(bind=None), Column(‘id‘, Integer(), table=<person>, primary_key=True, nullable=False), Column(‘name‘, String(length=50), table=<person>), schema=None)
3
4 >>> Person.metadata is User.metadata
5 True
6
7 >>> Person.metadata is Base.metadata
8 True

传统的mapper configuration 就不介绍了,因为不直观,而且代码量还长,下面只贴出官网的例子

 1 from sqlalchemy import Table, MetaData, Column, Integer, String, ForeignKey
 2 from sqlalchemy.orm import mapper
 3 metadata = MetaData()
 4 user = Table(‘user‘, metadata,
 5              Column(‘id‘, Integer, primary_key=True),
 6              Column(‘name‘, String(50)),
 7              Column(‘fullname‘, String(50)),
 8              Column(‘password‘, String(12))
 9              )
10
11
12 class User(object):
13
14
15 def __init__(self, name, fullname, password):
16 self.name = name
17 self.fullname = fullname
18 self.password = password
19 mapper(User, user)

三、Column

  1. DataType

    1) Integer

        id = Column(Integer)

    2) String

        name = Column(String(50))

      3) Boolean

gender = Column(Boolean)

1 person = Person(name=‘purk‘, gender=0)
2 person1 = Person(name=‘purk1‘, gender=11)
3 person2 = Person(name=‘purk2‘, gender=-1)
4 # try:
5 #     person3 = Person(name=‘purk3‘, gender=‘123‘)
6 # except Exception as e:
7 #     print(‘boolean类型在数据库中对应的smartint或boolean类型,输入字符串是不对的‘)
8 db.add_all([person, person1, person2])
9 db.commit()

结果如下

1 person_1 = db.query(Person).filter(Person.name == ‘purk‘).first()
2 person_2 = db.query(Person).filter(Person.name == ‘purk1‘).first()
3 person_3 = db.query(Person).filter(Person.name == ‘purk2‘).first()
4 print(person_1.gender)
5 print(person_2.gender)
6 print(person_3.gender)

查询 结果如下,满足boolean类型的一贯判断,非0即1.

      4) Date  -> datetime.date()

5) DateTime -> datetime.datetime()

      6) Enum

          level_list = (‘low‘, ‘medium‘, ‘high‘)

          level = Column(Enum(*level_list))

1 person = Person(name=‘purk‘, gender=True, level=‘123‘)
2 person1 = Person(name=‘purk1‘, gender=False, level=0)
3 person2 = Person(name=‘purk2‘, gender=False, level=1)
4 person3 = Person(name=‘purk3‘, gender=False, level=4)
5 person4 = Person(name=‘purk4‘, gender=-1, level=‘medium‘)

Enum的index是从1开始的,越界的或者值不在枚举列中的都保存为null了

时间: 2025-01-03 14:48:23

sqlalchemy - day1的相关文章

sqlalchemy备忘 笔记

查询全部记录,返回列表 user = self.dbSession.query(User).all()  #返回列表,全部结果封装在列表中 user = self.dbSession.query(User.username, User.createtime).all()  #返回指定字段,每条记录封装在元组中 user = self.dbSession.query(House).all()      #在添加到add后没有commit前的数据都可以查出来 user = self.dbSessio

Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. Memc

SQLAlchemy使用笔记--SQLAlchemy ORM(二)

参考: http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.html#building-a-relationship http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.html#working-with-related-objects 建立表之间带关系 建立外建 在address添加user的外键 from sqlalchemy import ForeignKey, Column, String

学习Python的day1

自己以前从来没有写博客的想法,但是学Python,里面的老师也说了,写博客可以加深自己的记忆,也能回顾内容.还能给别人参考.挺值的.2017-09-16 一. Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. 最新的TIOBE排行榜,Python赶超PHP占据第五, Python崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. Py

雅礼集训——day1、day2

day1: 嗯上午考试拿了100分.第一题40,第二题60.看完题的时候我就觉得第二题的部分分是最好得到的,因为数据范围只有300,而且一眼看上去就是网络流的二分图多重匹配模型?然后就建了个网络流写了些,期望得分是70分,但是第1组数据有点劲,被卡掉了,就拿了60分.正解是map+set的贪心...并不会STL 写完T2去看T1,先用DFS乱搞了一下,结果样例都没过去,我手推了一下样例,得到了一个公式,就是从一个点出发需要加上的边数=这个点通过DFS能够遍历到的点的个数-与这个点直接相连的点的个

SqlAlchemy ORM

SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果 Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如: MySQL-Python mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname&g

day13 SQLAlchemy

ORM:也叫关系对象映射 本篇要点: 原生模块 pymsql ORM框架 SQLAchemy pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 需要准备的环境: MySQL(服务端) pymysql(操作客户端) pymysql安装参考:http://www.cnblogs.com/woider/p/5926744.html pymysql的使用操作: 执行SQL语句: SQLAchemy SQLAlchemy本身无法操作数据库,其必须以来p

Python SQLAlchemy --1

本文為 Python SQLAlchemy ORM 一系列教學文: SQLAlchemy 大概是目前 Python 最完整的資料庫操作的套件了,不過最令人垢病的是它的文件真的很難閱讀,如果不搭配個實例進行學習真的很難理解. 此外,SQLAlchemy 依照架構將文件說明分為 SQLAlchemy ORM 與 SQLAlchemy Core ,如果不去細究到底有何不同,很容易讓人誤解. 基本上,如果只是基本的資料庫的表格建立.查詢.更新.刪除等,比較不需要使用表格間的關聯以及表格與 Python

python之sqlalchemy

python之sqlalchemy ORM: ORM框架的作用就是把数据库表的一行记录与一个对象互相做自动转换. 正确使用ORM的前提是了解关系数据库的原理. ORM就是把数据库表的行与相应的对象建立关联,互相转换. 由于关系数据库的多个表还可以用外键实现一对多.多对多等关联,相应地, ORM框架也可以提供两个对象之间的一对多.多对多等功能. 一 单表操作(不涉及一对多,多对多) #coding:utf8 import sqlalchemy from sqlalchemy import crea