关闭

Python操作主流数据库

标签: pythonredismongodbmysql数据库
352人阅读 评论(0) 收藏 举报
分类:

操作MySQL

1)Windows中安装python和pycharm
2)ubuntu中安装python和pycharm
这里写图片描述

安装步骤不做赘述,pycharm运行脚本

#!/usr/bin/env python
import MySQLdb
#get connection
try:
  con = MySQLdb.connect(
    host='localhost',
    user='root',
    passwd='12346',
    port=3308,
    db='sakila',
    charset='utf8'
    )
except MySQLdb.Error as e:
 print('error:%s'% e)
cursor = con.cursor()
cursor.execute('SELECT * FROM `store`')
rest = cursor.fetchone()
print(rest)
#close connection
con.close()

3)查询数据库

#!/usr/bin/env python
import MySQLdb
class MysqlQuery(object):
    def __init__(self):
        self.get_conn()
    def get_conn(self):
        # get connection
        try:
            self.conn = MySQLdb.connect(
                host='localhost',
                user='root',
                passwd='123456',
                port=3308,
                db='sakila',
                charset='utf8'
            )
        except MySQLdb.Error as e:
            print('error:%s' % e)

        cursor = self.conn.cursor()
        cursor.execute('SELECT * FROM `store`')
        rest = cursor.fetchone()
        print(rest)

    def close_conn(self):
        try:
            if self.conn:
                # close connection
                self.conn.close()
        except MySQLdb.Error as e:
            print('Error:%s'%e)


    def get_one(self):
        #prepare SQL
        /*虽然定义类型为int,可使用string*/
        sql='SELECT * FROM `store` where `store_id` =%s'
        #get cursor
        cursor=self.conn.cursor()
        cursor.execute(sql,('1',))

        print(cursor.rowcount)
        rest=dict(zip([k[0] for k in cursor.description],cursor.fetchone()))
        print(rest)
        print(rest['store_id'])
        self.close_conn()
        return rest
def main():
        obj = MysqlQuery()
        rest = obj.get_one();
        print(rest['store_id'])

if __name__ == '__main__':
    main()

/*取走所有数据,形成数组*/
rest = [dict(zip([k[0] for k in cursor.description],row))for row in cursor.fetchall()]

zip([iterable, …])
Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压)。

dict()作用:dict() 函数用于创建一个字典。返回一个字典。

class dict(**kwarg)
class dict(mapping, **kwarg)
class dict(iterable, **kwarg)
/*
 kwargs -- 关键字
 mapping -- 元素的容器。
 iterable -- 可迭代对象
*/

4)更新数据

 def add_one(self):
        row_count=0
        try:
            sql = ("insert into `film`(`title`,`description`,`language_id`) value" "(%s,%s,%s);")
            cursor = self.conn.cursor()
            cursor.execute(sql, ('chia', 'ashajhsjah','1'))
            self.conn.commit()
        except:
            print('error')
            self.conn.rollback()
        row_count=cursor.rowcount
        cursor.close()
        self.close_conn()
        return row_count

5)ORM:SQLAlChemy

 pip install SQLAlchemy
 import sqlalchemy

declarative_base() 创建了一个 BaseModel 类,这个类的子类可以自动与一个表关联。
增删改查

#!/usr/bin/python
#coding=utf-8
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Column, Integer, String, DateTime, Boolean
import  datetime
#engine=create_engine('数据库类型://用户名:密码@ip:端口/数据库名')
engine=create_engine('mysql://root:123456@localhost:3308/sakila')
Base=declarative_base()
Session = sessionmaker(bind=engine)
class Store(Base):
    __tablename__='country'#数据库表名
    country_id = Column(Integer, primary_key=True)
    country = Column(String(200), nullable=False)
    last_update = Column(String(2000), nullable=False)
class MysqlOrmTest(object):
    def __init__(self):
        self.session=Session()
    def add_one(self):
        new_obj=Store(
            country_id='130',
            country='hhhsahsa',
            last_update=datetime.datetime.now()#此处需要import datetime
        )
        self.session.add(new_obj)
        self.session.commit()
        return new_obj
    def get_one(self):
        return self.session.query(Store).get(1)
    def update_date(self):
        obj=self.session.query(Store).get(1)
        obj.manager_staff_id=1
        self.session.add(obj)
        self.session.commit()
        return obj
    def delete_data(self):
        data=self.session.query(Store).get(3)
        self.session.delete(data)
        self.session.commit()
def main():
     # rest = obj.add_one()
    # print(dir(rest))
    # print(obj.get_one().title)
    # print(obj.get_more().count())
    # for row in obj.get_more():
    #     print(row.title)
    # print(obj.update_data())

if __name__ == '__main__':
    main()

6)项目实战

使用pycharm专业版,选择flask框架,代码如下:

from flask import Flask
app = Flask(__name__)
@app.route('/hello')
def hello_world():
    return 'Hello World!hello'
if __name__ == '__main__':
    app.run(debug=True)
##flask支持热部署

简单搭建flask架构网站
本人使用pycharm开发flask项目,可以利用工具导入工具包:
这里写图片描述

##引入相关包
from flask_sqlalchemy import SQLAlchemy
from flask import Flask, render_template, flash, redirect, url_for, abort, request

app = Flask(__name__)
##配置数据库
app.config['SQLALCHEMY_DATABASE_URI']  = 'mysql://root:123456@localhost:3308/flaskdb'
db=SQLAlchemy(app)
##完成ORM映射
class News(db.Model):
    __tablename__='news'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(200), nullable=False)
    img_url = db.Column(db.String(2000), nullable=False)
    content = db.Column(db.String(2000), nullable=True)
    is_valid = db.Column(db.String(2000), nullable=True)
    created_at = db.Column(db.String(2000), nullable=True)
    updated_at = db.Column(db.String(2000), nullable=True)
    news_type = db.Column(db.String(2000), nullable=True)

    def __repr__(self):
        return '<News %r>' % self.title
##python生成HTML效果不好
@app.route('/hello')
def hello_world():
    return 'Hello World!hello'
##使用渲染引擎Jinja2
@app.route('/')
def index():
    news_list=News.query.all()
    return render_template("index.html",news_list=news_list)


@app.route('/cat/<name>/')
def cat(name):
    news_list=News.query.filter(News.news_type==name)
    return render_template('cat.html',new_list=news_list)


@app.route('/detail/<int:pk>/')
def detail(pk):
    new_obj=News.query.get(pk)
    return render_template('detail.html',new_obj=new_obj)


@app.route('/admin/')
@app.route('/admin/<int:page>/')
def admin(page=None):
    return render_template("admin/index.html")


@app.route('/admin/add/', methods=['GET', 'POST'])
def add():
    return render_template("admin/add.html")


@app.route('/admin/update/<int:pk>/', methods=['GET', 'POST'])
def update(pk):
    return render_template("admin/update.html")


@app.route('/admin/delete/<int:pk>/', methods=['POST'])
def delete(pk):
    return 'no'


if __name__ == '__main__':
    app.run(debug=True)

操作Redis

1) Redis安装

sudo apt-get update
sudo apt-get install redis-server

##启动Redis服务器
redis-server

##查看 redis 是否启动?
redis-cli

2)Redis命令

Set animal 'cat'
get animal

##添加value
append animal 'dog'

mset user1 'chu' user2 'yao'
mget user1 user2

set num 9

incr/decr num /*增加减少1*/

set user:chuyao;age:45 'asasasasa'

列表(list)相关操作

lpush/rpush q1 'chu' 'yao' 'Amy'/*从左、右插入数据*/
lrange/*获取指定长度的数据*/
ltrim/*截取一定长度的数据*/
lpop/rpop/*移除最左、右的元素并返回*/
lpushx/rpushx --key/* key存在时候才插入数据,不存在时不做任何处理*/

集合(Set)相关操作

sadd/srem /*添加、删除元素*/
sismember /*判断是否为set的一个元素*/
smembers /*返回该集合的所有成员*/
sdiff /*返回一个集合与其他集合的差异*/
sinter/*返回几个集合的交集*/
sunion/*返回几个集合的并集*/

散列(hash)相关操作

3)redis-py连接

这里写图片描述

import redis
r=redis.StrictRedis(host='120.95.132.174',port=6379,db=0)
user1=r.get('user1')
print(user1)

注意,如果是远程连接数据库,需要修改Redis配置文件。
1)注释掉bind 127.0.0.1可以使所有的ip访问redis。
2)修改办法:protected-mode no

4)Python 操作String类型

import redis

class TestString(object):
    def __init__(self):
        self.r=redis.StrictRedis(host='120.95.132.174',port=6379,db=0)
    def test_set(self):
        rest=self.r.set('user2','Amy');
        print(rest)
    def test_get(self):
        rest=self.r.get('user1')
        print rest
        return rest
    def test_mset(self):
        d={
            'user3':'Bob',
            'user4':'BobX'
        }
        rest=self.r.mset(d)
        print(rest)
        return rest
    def test_mget(self):
        l=['user1','user2']
        rest=self.r.mget(l)
        print(rest)
        return rest
    def test_del(self):
        rest=self.r.delete('user1')
        print (rest)
def main():
    str_obj=TestString();
    # str_obj.test_set();
    str_obj.test_get();
    # str_obj.test_mset();
    # str_obj.test_mget();
    # str_obj.test_del();
if __name__=='__main__':
    main()

5)项目实战

新闻数据,Hash
新闻ID,String
分页数据,List
排序,Sorted Set

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Python操作MySQL数据库的三种方法

1. MySQLdb 的使用(1) 什么是MySQLdb?  MySQLdb 是用于 Python 连接 MySQL 数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 My...
  • Oscer2016
  • Oscer2016
  • 2017-04-20 13:13
  • 8721

python 连接各类主流数据库简单示例

本篇博文主要介绍Python连接各种数据库的方法及简单使用 包括关系数据库:sqlite,mysql,mssql 非关系数据库:MongoDB,Redis代码写的比较清楚
  • a87b01c14
  • a87b01c14
  • 2016-05-31 16:17
  • 10389

python 连接各类主流数据库简单示例

本篇博文主要介绍Python连接各种数据库的方法及简单使用 包括关系数据库:sqlite,mysql,mssql 非关系数据库:MongoDB,Redis代码写的比较清楚
  • a87b01c14
  • a87b01c14
  • 2016-05-31 16:17
  • 10389

Python操作MySQL数据库的三种方法

1. MySQLdb 的使用(1) 什么是MySQLdb?  MySQLdb 是用于 Python 连接 MySQL 数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 My...
  • Oscer2016
  • Oscer2016
  • 2017-04-20 13:13
  • 8721

三种主流数据库区别

Oracle Oracle 能在所有主流平台上运行(包括Windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持,Oracle并行服务器通过使...
  • wuliuwei1234
  • wuliuwei1234
  • 2017-08-01 10:26
  • 2182

三大主流数据库

MySql MySql从命令行导入SQL脚本时,中文出现乱码 在图形界面管理工具 MySql Query Browser中打开脚本(脚本包括建库、建表、添加数据),并执行,不会有任何问题;但是...
  • avi9111
  • avi9111
  • 2014-05-08 10:39
  • 4954

三大主流前端框架与项目开发

三大主流前端框架与项目开发 想成为高薪web前端工程师,只掌握HTML /CSS /JS已远远不够 带你入门Vue2.0及学习实战项目 •...
  • kingice1014
  • kingice1014
  • 2017-05-11 08:12
  • 2272

三种主流Web架构

做WEB好几年了,各种语言和技术都稍有涉猎。今天心血来潮,突然想总结一下。其实不论什么技术,什么需求,通常WEB开发就是通过WEB前端管理一个或大或小或独立或分布式的关系型数据库,很多东西都是相通的。...
  • zxxSsdsd
  • zxxSsdsd
  • 2016-05-13 15:48
  • 13991

几款主流数据库的详细比较

http://blog.csdn.net/zhouhx08/article/details/7528254 开发数据库应用,选择一个好的数据库是非常重要的。目前,商品化的数据库管理系统以...
  • loongwong2011
  • loongwong2011
  • 2016-09-02 09:28
  • 6656

内存数据库主流的有哪些,并给出各自特点!

内存数据库从范型上可以分为关系型内存数据库和键值型内存数据库。 在实际应用中内存数据库主要是配合oracle或mysql等大型关系数据库使用,关注性能。 作用类似于缓存,并不注重数据完整性和数据一...
  • caomiao2006
  • caomiao2006
  • 2016-07-30 23:38
  • 3580
    个人资料
    • 访问:18068次
    • 积分:682
    • 等级:
    • 排名:千里之外
    • 原创:48篇
    • 转载:21篇
    • 译文:1篇
    • 评论:1条
    最新评论