Python连接MySQL、Mongodb、SQLite
存储方式不同
关系型数据库:以文件方式永久存储到磁盘,如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的新增数据
- python中连接三大主流数据库mysql,mongodb,redis
- python连接mysql、mongodb、redis
- Scrapy连接到各类数据库(SQLite,Mysql,Mongodb,Redis)
- python连接MySQL、MongoDB、Redis、memcache等数据库的方法
- python操作MongoDB、MySQL、Postgres、Sqlite、redis实例
- python连接MySQL、MongoDB、Redis、memcache等数据库的方法
- python连接MySQL、MongoDB、Redis、memcache等数据库的方法
- python-mysql 交互 mongodb,redis连接python
- Python 数据库连接(sqlite, mysql, oracle, postgresql, sql server)
- Python远程连接数据库(MongoDB Redis Mysql )
- python连接sqlite(mysql)数据库以及sqlite数据库基础操作
- 关于python3连接Mysql(pymysql方式)
- python 2.7 连接mysql
- Python 连接MySQL 简介
- python3+ 连接并操作mysql 数据库,支持读写分离
- Python连接Mysql数据库——ModuleNotFoundError:No module named 'mysql'
- python下连接mysql的错误 错误码 【10061】
- Python2 Mysql连接远程数据库 4000
- python 连接mysql
- python3怎么连接mongodb?