[转载] Python连接MySQL、Mongodb、SQLite

参考链接: 使用PyMongo将MongoDB与Python集成

存储方式不同 

关系型数据库:以文件方式永久存储到磁盘,如MySQL 非关系型数据库:存储在内存,访问速度很快,通常用来做队列,缓存之类的服务,如Mongodb 

SQLAlchemy(是一款ORM具体实现的库) 

定义:SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具。兼容众多数据库(如 SQLite、MySQL、Postgres、Oracle、MS-SQL、SQLServer 和 Firebird)的企业级持久性模型,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型。–百度百科 

作用:高效访问数据库且支持跨数据库使用(不用因为更换了数据库而需要重新编写SQL) 

ORM概念 

定义:Object-Relational Mapping,对象与关系型数据库映射关系 目的:通过ORM操作数据库,并不需要通过数据库的SQL语言进行,只要对python的数据对象执行相关方法即可,比如添加一条记录,user.add() 

SQL和ORM比较: 

ORM优势: ORM对SQL操作进行了封装 1、更换数据库只要更换数据库源,代码无需改动 2、对数据库操作转为对python对象(Model)的操作 3、安全性更高 

SQL劣势: 1、SQL语句可能会随着厂商不同而有所差异 2、封装性不够,重复代码多,而不够优雅 3、安全性不够,可能会有注入漏洞 

连接SQLite(基于flask框架示例) 

1、SQLAlchemy-1.3.3.tar.gz安装 

pin install SQLAlchemy-1.3.3.tar.gz

 

2、sqlite-web-0.3.6.tar.gz安装 

pip install Flask_SQLAlchemy-2.4.1-py2.py3-none-any.whl

 

3、app.py里面导入from flask_sqlalchemy import SQLAlchemy 

4、数据库信息配置,如数据库名称等 

#配置数据库

#变更后是否追踪,这里默认为True

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

#cms.db为数据库名字

app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:///cms.db"

 

5、数据库实例化 

#实例化数据库名称为db

db = SQLAlchemy(app)

 

6、创建数据库Model模型,继承db.Model 

#创建数据库Model结构

class User(db.Model):

    #db.Column()为创建字段,第一个参数为字段数据类型

    id = db.Column(db.Integer, primary_key=True)

    username = db.Column(db.String)

    password = db.Column(db.String)

    sex = db.Column(db.String)

    age = db.Column(db.Integer)

    >>> from app import db

>>> db.create_all()#执行后通过sqlite-web界面可以看到有更新数据模型

 

7、实例化模型对象,用来添加记录用 

#实例化用户

        user = User(

            username=username,

            password=password,

            sex=sex,

            age=age

        )

 

8、借助db.session对象用来与数据库交互(如写入记录,确认等) 

db.session.add(user)#将用户添加到对话里面,还没提交数据库!

db.session.commit()#确认提交

 

9、创建数据库 

#flask shell

#先进入shell命令行

from app import db

#从app.py文件中导入db数据库对象

db.create_all()

#用db对象创建一个数据表,路径及文件名参考app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:///cms.db"

 

连接Mongodb 

前提:电脑确认已经开启了mongodb服务  

import pymongo

#创建MongoDB 的连接对象

client = pymongo.MongoClient(host='localhost', port=27017)

#指定要使用的数据库

db = client.test

#指定数据库中要使用的集合

collection = db.commodity12

 

student = {

    'id': '20170101',

    'name': 'Jordan',

    'age': 20,

    'gender': 'male'

}

 

result = collection.insert_one(student)

print(result)

print(result.inserted_id)

#执行完输出

<pymongo.results.InsertOneResult object at 0x000001DD8C6FBA88>

5f30f92f31e3295b39e20cef

 

连接上Mongodb,刷新,查看test.commodity12下,可以发现已经新增了一条json  

连接MySQL 

import mysql.connector as connector

 

#数据库连接对象

cnx = connector.connect(user='root', password='123456',

                        host='localhost', database='mydb')

 

#游标,通过游标对象执行sql语句

cursor = cnx.cursor()

 

def createUser(user):

    words = list("abcdefghijklmnopqrstuvwxyz")

    sql = "insert into `users`" \

          "(username,realname,passwd,sex)" \

          "values" \

          "('{username}','{realname}','{passwd}','{sex}')"

    sql = sql.format(**user)

    res = None

    print(sql)

 

    #通过异常执行

    try:

        # 执行sql语句

        cursor.execute(sql)

        cnx.commit()  # 创建表时加不加这一句都不影响

        print(dir(cursor))

        res = cursor.lastrowid

    except Exception as e:

        # print(sql)

        print(e)

    else:

        print("数据表插入成功")

    return res

 

    # # 关闭游标

    #     # cursor.close()

    #     #

    #     # # 关闭连接

    #     # cnx.close()

 

user = {

    'username': 'ameng0810',

    'realname': 'mynicknamemeng',

    'passwd': '123456789',

    'sex': '女'

}

 

res = createUser(user)

print("数据插入结果:", res)

#输出

insert into `users`(username,realname,passwd,sex)values('ameng0810','mynicknamemeng','123456789','女')

['__abstractmethods__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_abc_cache', '_abc_negative_cache', '_abc_negative_cache_version', '_abc_registry', '_batch_insert', '_binary', '_connection', '_description', '_execute_iter', '_executed', '_executed_list', '_fetch_row', '_fetch_warnings', '_handle_eof', '_handle_noresultset', '_handle_result', '_handle_resultset', '_handle_warnings', '_have_unread_result', '_last_insert_id', '_nextrow', '_process_params', '_process_params_dict', '_raw', '_reset_result', '_rowcount', '_set_connection', '_stored_results', '_warning_count', '_warnings', 'arraysize', 'callproc', 'close', 'column_names', 'description', 'execute', 'executemany', 'fetchall', 'fetchmany', 'fetchone', 'fetchwarnings', 'getlastrowid', 'lastrowid', 'next', 'nextset', 'reset', 'rowcount', 'setinputsizes', 'setoutputsize', 'statement', 'stored_results', 'with_rows']

数据表插入成功

数据插入结果: 17

 

数据库查看:本地连接  连接成功后,进到mydb.users表,可以看到id为17的新增数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值