数据库服务基于阿里云关系型数据库服务(Relational Database Service,简称RDS),为开发者提供了稳定可靠、可弹性伸缩的在线数据库服务。RDS采用即开即用方式,并提供数据库在线扩容、备份回滚、性能监测及分析功能
TAE Python目前支持使用TAE提供的MySQL数据库服务
import MySQLdb
conn=MySQLdb.connect()
MySQLdb提供的connect方法用来和数据库建立连接 返回连接对象.(不需要输入参数)
连接对象方法
方法名 |
描述 |
cursor() |
返回链接的游标对象 |
commit() |
如果支持的话就提交挂起的事务,否则不做任何事 |
rollback() |
会滚挂起的事务 |
close() |
关闭链接之后,链接对象和它的游标均不可用 |
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) try:
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) try: 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') try: cursor.execute(up_sql)
conn.commit() except: conn.rollback()
#DELETE
de_sql = "DELETE FROM user_info WHERE age>'%d'" % (20) try:
cursor.execute(sql)
conn.commit() except: print ' DELETE Error' cursor.close() conn.close()
下面是创建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',其他配置可任意填写。