数据库服务简介
数据库服务基于阿里云关系型数据库服务(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',其他配置可任意填写。