数据库服务简介

数据库服务基于阿里云关系型数据库服务(Relational Database Service,简称RDS),为开发者提供了稳定可靠、可弹性伸缩的在线数据库服务。RDS采用即开即用方式,并提供数据库在线扩容、备份回滚、性能监测及分析功能

TAE Python目前支持使用TAE提供的MySQL数据库服务

使用MySQLdb链接mysql 数据库

1.引入MySQLdb库

import MySQLdb 

2.和数据库建立连接

conn=MySQLdb.connect() 

MySQLdb提供的connect方法用来和数据库建立连接 返回连接对象.(不需要输入参数)

连接对象方法

cursor()

返回链接的游标对象

commit()

如果支持的话就提交挂起的事务,否则不做任何事

rollback()

会滚挂起的事务

close()

关闭链接之后,链接对象和它的游标均不可用

3.执行sql语句和接收返回值

cursor = conn.cursor()
cursor.execute(sql, param)   # 执行 sql 语句
result = cursor.fetchall()   # 接受返回值

首先,我们用使用连接对象获得一个cursor对象,接下来,我们会使用cursor提供的方法来进行工作.这些方法包括两大类:1.执行命令,2.接收返回值

cursor游标对象方法介绍

execute(query[, args])

执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数

executemany(query, args)

执行单条sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数

callproc(procname[, args])

用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数

fetchall()

接收全部的返回结果行

fetchmany([size=None])

接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据

fetchone()

返回一条结果行

close()

# coding: utf8
import sys
import MySQLdb
conn = MySQLdb.connect()
cursor = conn.cursor()
	#create table
sql = """CREATE TABLE if not exists user_info(
	         id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
	         name CHAR(20),
	         age INT,
	         sex CHAR(1),
	         income FLOAT
	)DEFAULT CHARSET=UTF8;
cursor.execute(sql)
	#INSERT
in_sql = "INSERT INTO user_info(name, age, sex, income) VALUES('%s', '%s', '%s', '%s')" % ('Mac', 20, 'M', 2000)
	cursor.execute(in_sql)
   conn.commit()
   except:
conn.rollback()
#使用sql语句,这里要接收的参数都用%s占位符.要注意的是,无论你要插入的数据是什么类型,占位符永远都要用%s
sql="insert into user_info (name, age, sex, income) values(%s,%s,%s,%s)"
#param应该为tuple或者list
param=('Macs', 20, 'M', 2000)
n=cursor.execute(sql,param)  #执行,如果成功,n的值为1

#批量插入 

sql="insert into user_info values(%s,%s,%s,%s)"
#每个值的集合为一个tuple,整个参数集组成一个tuple,或者list
param=(( name, age, sex, income),( name2, age2, sex2, income2))
#使用executemany方法来批量的插入数据
n=cursor.executemany(sql,param)
se_sql = "SELECT * FROM user_info WHERE income > '%s'" % (1000)
    cursor.execute(se_sql)
	results = cursor.fetchall()    
	# 查询返回的全部结果.每条结果都是一个tuple类型的数据,这些tuple组成了一个tuple
	print results
	for row in results:
	name = row[1]
	age = row[2]
	sex = row[3]
	income = row[4]
	print 'name=%s, age=%d, sex=%s, income=%d' % \
	   (name, age, sex, income)
	except:
	    print 'Error: unable to fecth data'

#UPDATE

up_sql = "UPDATE user_info SET age=age+1 WHERE sex='%c'" % ('m')
    cursor.execute(up_sql)
	conn.commit()
except:
    conn.rollback()

#DELETE

de_sql = "DELETE FROM user_info WHERE age>'%d'" % (20)
	cursor.execute(sql)
	conn.commit()
    except:
	  print ' DELETE  Error'
cursor.close()
conn.close()

使用sqlalchemy 链接mysql 数据库

下面是创建engine代码片段,具体使用方式请参考完整demo和sqlalchemy官方文档

from sqlalchemy import create_engine
engine = create_engine('mysql://', pool_recycle=3600)
// create_engine的参数可以直接为您本地的mysql连接串,或以'mysql://'开头的字符串。会自动指向TAE容器的RDB数据库
from sqlalchemy.orm import scoped_session
db_session = scoped_session(sessionmaker(bind=engine))

在Flask中使用flask_sqlalchemy 

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)        
app.config['SQLALCHEMY_DATABASE_URI'] ='mysql://'
//app.config['SQLALCHEMY_DATABASE_URI'] 同样可以直接为您本地的mysql连接穿,或以'mysql://'开头的字符串。会自动指向TAE容器的RDB数据库
db = SQLAlchemy(app)

配置Django的数据源 

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', 
'NAME': 'tae_test', 
'USER': 'root',
'PASSWORD': '123456', 
'HOST': 'localhost',
'PORT': '', 
//只要将'ENGINE' 选为'django.db.backends.mysql',其他配置可任意填写。