python 之路 13 ORM SQLAlchemy

1. 安装

# pip install sqlalchemy
# pip install pymysql

2. 创建引擎

>>> from sqlalchemy import create_engine
>>> engine = create_engine(‘mysql+pymysql://USERNAME:[email protected]_HOST:DB_PORT/DB_NAME‘, pool_recycle=3600)
pool_recycle 指定连接池收回时间。

引擎初始化后,就可以连接数据库了。
3. 连接数据库

>>> connection = engine.connect()

4. metadata

>>> from sqlalchemy import MetaData
>>> metadata = MetaData()

5. 定义表

>>> from sqlalchemy import Table, Column, Integer, Numeric, String, ForeignKey, DateTime      
>>> from datetime import datetime                                                             
>>> users = Table(‘users‘, metadata,
...     Column(‘user_id‘, Integer(), primary_key=True),
...     Column(‘username‘, String(15), nullable=False, unique=True),
...     Column(‘email_address‘, String(255), nullable=False),
...     Column(‘phone‘, String(20), nullable=False),
...     Column(‘password‘, String(25), nullable=False),
...     Column(‘created_on‘, DateTime(), default=datetime.now),
...     Column(‘updated_on‘, DateTime(), default=datetime.now, onupdate=datetime.now)
... )

6. 创建表

>>> metadata.create_all(engine)

7. 插入数据

>>> ins = users.insert().values(
... user_id=8888,
... username=‘111cn.net ‘,
... email_address = ‘[email protected] ‘,
... phone = 12345678901,
... password = ‘www.111cn.net ‘
... )
>>> print ins
INSERT INTO users (user_id, username, email_address, phone, password, created_on, updated_on) VALUES (:user_id, :username, :email_address, :phone, :password, :created_on, :updated_on)
>>> ins.compile().params
{‘username‘: ‘111cn.net ‘, ‘user_id‘: 8888, ‘phone‘: 12345678901, ‘created_on‘: None, ‘updated_on‘: None, ‘password‘: ‘www.111cn.net ‘, ‘email_address‘: ‘[email protected] ‘}

8. 执行

>>> result = connection.execute(ins)
>>> result.inserted_primary_key
[8888]

9. 插入多条

>>> ins = users.insert()
>>> multi_data = [
... {
... ‘user_id‘:1,
... ‘username‘:‘u1‘,
... ‘email_address‘:‘[email protected] ‘,
... ‘phone‘ : 12345678901,
... ‘password‘: ‘www.111cn.net ‘
... },
... {
... ‘user_id‘:2,
... ‘username‘:‘u2‘,
... ‘email_address‘:‘[email protected] ‘,
... ‘phone‘ : 12345678901,
... ‘password‘: ‘www.111cn.net ‘
... }
... ]
>>> result = connection.execute(ins, multi_data)
>>> result.rowcount
2

10. 查询

>>> from sqlalchemy import select
>>> s = select([users])
>>> print str(s)
SELECT users.user_id, users.username, users.email_address, users.phone, users.password, users.created_on, users.updated_on 
FROM users
>>> rp = connection.execute(s)
>>> results = rp.fetchall()
>>> print results
[(1, ‘u1‘, ‘[email protected] ‘, ‘12345678901‘, ‘www.111cn.net ‘, datetime.datetime(2016, 6, 22, 11, 26, 5), datetime.datetime(2016, 6, 22, 11, 26, 5)), (2, ‘u2‘, ‘[email protected] ‘, ‘12345678901‘, ‘www.111cn.net ‘, datetime.datetime(2016, 6, 22, 11, 26, 5), datetime.datetime(2016, 6, 22, 11, 26, 5)), (8888, ‘111cn.net ‘, ‘[email protected] ‘, ‘12345678901‘, ‘www.111cn.net ‘, datetime.datetime(2016, 6, 22, 11, 13, 32), datetime.datetime(2016, 6, 22, 11, 13, 32))]

>>> first_row = results[0]
>>> print first_row
(1, ‘u1‘, ‘[email protected] ‘, ‘12345678901‘, ‘www.111cn.net ‘, datetime.datetime(2016, 6, 22, 11, 26, 5), datetime.datetime(2016, 6, 22, 11, 26, 5))
>>> first_row[1]
‘u1‘
>>> first_row.phone
‘12345678901‘
>>> first_row[users.c.user_id]

>>> rp = connection.execute(s)
>>> for record in rp:         
...   print record.username   
... 
u1
u2
111cn.net

>>> s = select([users.c.user_id, users.c.username])
>>> rp = connection.execute(s)
>>> print rp.keys()
[‘user_id‘, ‘username‘]
>>> print rp.fetchone()
(8888, ‘111cn.net ‘)
>>> print rp.fetchone()
(1, ‘u1‘)
>>> print rp.fetchone()
(2, ‘u2‘)
>>> print rp.fetchone()
None

11. 排序

>>> s = select([users.c.user_id, users.c.username])
>>> s = s.order_by(users.c.user_id)
>>> print str(s)
SELECT users.user_id, users.username 
FROM users ORDER BY users.user_id
>>> rp = connection.execute(s)
>>> for i in rp:
...   print (‘{} - {}‘.format(i.user_id, i.username)) 
... 
1 - u1
2 - u2
8888 - 111cn.net

>>> s = select([users.c.user_id, users.c.username])
>>> s = s.order_by(desc(users.c.user_id))
>>> rp = connection.execute(s)
>>> print ([‘{} - {}‘.format(i.user_id, i.username) for i in rp])
[‘8888 - 111cn.net ‘, ‘2 - u2‘, ‘1 - u1‘]

>>> s = select([users.c.user_id, users.c.username]).where(users.c.user_id.in_([1,2]))
>>> rp = connection.execute(s)                                                       
>>> print ([‘{} - {}‘.format(i.user_id, i.username) for i in rp])                    
[‘1 - u1‘, ‘2 - u2‘]

12. 更新

>>> from sqlalchemy import update
>>> u = update(users).where(users.c.username == ‘u1‘)
>>> u = u.values(phone=00000000000)
>>> print str(u)
UPDATE users SET phone=:phone, updated_on=:updated_on WHERE users.username = :username_1
>>> result = connection.execute(u)
>>> print result
<sqlalchemy.engine.result.ResultProxy object at 0x7f6839f1a290>
>>> print result.rowcount
1
>>> s = select([users]).where(users.c.username == ‘u1‘)
>>> result = connection.execute(s).first()
>>> print result
(1, ‘u1‘, ‘[email protected] ‘, ‘0‘, ‘www.111cn.net ‘, datetime.datetime(2016, 6, 22, 11, 26, 5), datetime.datetime(2016, 6, 22, 13, 51, 16))
>>> print result.keys()
[‘user_id‘, ‘username‘, ‘email_address‘, ‘phone‘, ‘password‘, ‘created_on‘, ‘updated_on‘]
>>> for key in result.keys():
...   print(‘{:>20}: {}‘.format(key, result[key]))
... 
             user_id: 1
            username: u1
       email_address: [email protected] 
               phone: 0
            password: www.111cn.net 
          created_on: 2016-06-22 11:26:05
          updated_on: 2016-06-22 13:51:16
13. 删除

>>> print str(u)
DELETE FROM users WHERE users.username = :username_1
>>> s = select([users]).where(users.c.username == ‘u1‘)
>>> result = connection.execute(s).fetchall()
>>> print result
[]

时间: 2024-10-08 03:04:41

python 之路 13 ORM SQLAlchemy的相关文章

python之路 RabbitMQ、SQLAlchemy

一.RabbitMQ RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消 息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术.排队指的是应用程序通过 队列来通信.队列的使

【python之路13】python的深浅拷贝

深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import copy # ######### 数字.字符串 ######### n1 = 123 # n1 = "i am alex age 10" print(id(n1)) # ## 赋值 ## n2 = n1 print(id(n2)) # ## 浅拷贝 ## n2 = copy.copy(

python之路_django ORM相关补充

一.非django项目文件执行ORM 在不启动django项目的情况下,我们是否可以进行ORM操作呢?当然不行.因为所有的ORM操作都必须是要连接数据库的.但是我们有这样的一个需求:想在一个文件中执行ORM.该如何实现呢?参考如下实例: import os import sys import django sys.path.append(r'C:\Users\Administrator\PycharmProjects\s6day109') #将当前djang项目路径添加到环境 os.chdir(

python之路---13 内置函数

三十一.内置函数 思维导图 1.作用域相关 locals()     返回当前作用域中的名字 globals()  返回全局作用域中的名字 2.迭代器相关 range()     生成数据 next()      迭代器向下执行一次   等价于  .__next__() iter()        获取迭代器      等价于   .__iter__() 3.字符串类型代码的执行 ①eval    执行字符串类型的代码,并返回最终结果 可还原 字典  列表  元组 ②exec    执行字符串类

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

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

数学之路-python计算实战(13)-机器视觉-图像增强

指数变换的基本表达式为:y=bc(x-a)-1 当中參数b.c控制曲线的变换形状,參数a控制曲线的位置. 指数变换的作用是扩展图像的高灰度级.压缩低灰度级.能够用于亮度过高的图像 本博客全部内容是原创,假设转载请注明来源 http://blog.csdn.net/myhaspl/ 对太阳图像进行变换,使低亮度区(温度较低区域)不再显示,突出亮度区(温度较高区域). newimg=np.array(np.power(b,c*(img-a))-1,np.uint8) cv2.imshow('src'

Python之路【第十七篇】:Django【进阶篇 】

Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db = MySQLdb.connect(user='root', db='wupeiqidb', passwd='1234', host='localhost')

七日Python之路--第十二天(Django Web 开发指南)

<Django Web 开发指南>.貌似使用Django1.0版本,基本内容差不多,细读无妨.地址:http://www.jb51.net/books/76079.html (一)第一部分 入门 (1)内置数字工厂函数 int(12.34)会创建一个新的值为12的整数对象,而float(12)则会返回12.0. (2)其他序列操作符 连接(+),复制(*),以及检查是否是成员(in, not in) '**'.join('**')   或  '***%s***%d' % (str, int)

Python之路【第十六篇】:Django【基础篇】

Python之路[第十六篇]:Django[基础篇] Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. 基本配置 一.创建django程序 终端命令:django-admin startproject sitename IDE创建Django程序时,本质上都是自动执行上述命令 其他常用命令: python manage.py runserver