python中常见的数据库有哪些呢?数据库大致分为两大类,第一类是包括关系数据库,第二类是非关系数据库,下面介绍一下这两类数据库的相关知识。

包括关系数据库:sqlite,mysql,mssql

非关系数据库:MongoDB,Redis

1. 连接Sqliteimport sqlite3

import traceback

try:

# 如果表不存在,就创建

with sqlite3.connect('test.db') as conn:

print("Opened database successfully")

# 删除表

conn.execute("DROP TABLE IF EXISTS COMPANY")

# 创建表

sql = """

CREATE TABLE IF NOT EXISTS COMPANY

(ID INTEGER PRIMARY KEY AUTOINCREMENT,

NAME TEXT NOT NULL,

AGE INT NOT NULL,

ADDRESS CHAR(50),

SALARY REAL);

"""

conn.execute(sql)

print("create table successfully")

# 添加数据

conn.executemany("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES (?, ?, ?, ? )",

[('Paul', 32, 'California', 20000.00),

('Allen', 25, 'Texas', 15000.00),

('Teddy', 23, 'Norway', 20000.00),

('Mark', 25, 'Rich-Mond ', 65000.00),

('David', 27, 'Texas', 85000.00),

('Kim', 22, 'South-Hall', 45000.00),

('James', 24, 'Houston', 10000.00)])

# conn.execute("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)\

# VALUES ( 'Paul', 32, 'California', 20000.00 )")

#

# conn.execute("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)\

# VALUES ('Allen', 25, 'Texas', 15000.00 )")

#

# conn.execute("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)\

# VALUES ('Teddy', 23, 'Norway', 20000.00 )")

#

# conn.execute("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)\

# VALUES ( 'Mark', 25, 'Rich-Mond ', 65000.00 )")

#

# conn.execute("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)\

# VALUES ( 'David', 27, 'Texas', 85000.00 )");

#

# conn.execute("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)\

# VALUES ( 'Kim', 22, 'South-Hall', 45000.00 )")

#

# conn.execute("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)\

# VALUES ( 'James', 24, 'Houston', 10000.00 )")

# 提交,否则重新运行程序时,表中无数据

conn.commit()

print("insert successfully")

# 查询表

sql = """

select id,NAME,AGE,ADDRESS,SALARY FROM COMPANY

"""

result = conn.execute(sql)

for row in result:

print("-" * 50) # 输出50个-,作为分界线

print("%-10s %s" % ("id", row[0])) # 字段名固定10位宽度,并且左对齐

print("%-10s %s" % ("name", row[1]))

print("%-10s %s" % ("age", row[2]))

print("%-10s %s" % ("address", row[3]))

print("%-10s %.2f" % ("salary", row[4]))

# or

# print('{:10s} {:.2f}'.format("salary", row[4]))

except sqlite3.Error as e:

print("sqlite3 Error:", e)

traceback.print_exc()

2.连接mysql

2.2 使用MySQLdb

2.1使用mysqldb库中的_mysqlimport MySQLdb

from contextlib import closing

import traceback

try:

# 获取一个数据库连接

with closing(MySQLdb.connect(host='localhost', user='root', passwd='root', db='test', port=3306,charset='utf8')) as conn:

print("connect database successfully")

with closing(conn.cursor()) as cur:

# 删除表

cur.execute("DROP TABLE IF EXISTS COMPANY")

# 创建表

sql = """

CREATE TABLE IF NOT EXISTS COMPANY

(ID INTEGER PRIMARY KEY NOT NULL auto_increment,

NAME TEXT NOT NULL,

AGE INT NOT NULL,

ADDRESS CHAR(50),

SALARY REAL);

"""

cur.execute(sql)

print("create table successfully")

# 添加数据

# 在一个conn.execute里面里面执行多个sql语句是非法的

cur.executemany("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ( %s, %s, %s, %s )",

[('Paul', 32, 'California', 20000.00),

('Allen', 25, 'Texas', 15000.00),

('Teddy', 23, 'Norway', 20000.00),

('Mark', 25, 'Rich-Mond ', 65000.00),

('David', 27, 'Texas', 85000.00),

('Kim', 22, 'South-Hall', 45000.00),

('James', 24, 'Houston', 10000.00)])

# 提交,否则重新运行程序时,表中无数据

conn.commit()

print("insert successfully")

# 查询表

sql = """

select id,NAME,AGE,ADDRESS,SALARY FROM COMPANY

"""

cur.execute(sql)

for row in cur.fetchall():

print("-" * 50) # 输出50个-,作为分界线

print("%-10s %s" % ("id", row[0])) # 字段名固定10位宽度,并且左对齐

print("%-10s %s" % ("name", row[1]))

print("%-10s %s" % ("age", row[2]))

print("%-10s %s" % ("address", row[3]))

print("%-10s %s" % ("salary", row[4]))

except MySQLdb.Error as e:

print("Mysql Error:", e)

traceback.print_exc() # 打印错误栈信息

2.2 使用MySQLdbimport MySQLdb

from contextlib import closing

import traceback

try:

# 获取一个数据库连接

with closing(MySQLdb.connect(host='localhost', user='root', passwd='root', db='test', port=3306,charset='utf8')) as conn:

print("connect database successfully")

with closing(conn.cursor()) as cur:

# 删除表

cur.execute("DROP TABLE IF EXISTS COMPANY")

# 创建表

sql = """

CREATE TABLE IF NOT EXISTS COMPANY

(ID INTEGER PRIMARY KEY NOT NULL auto_increment,

NAME TEXT NOT NULL,

AGE INT NOT NULL,

ADDRESS CHAR(50),

SALARY REAL);

"""

cur.execute(sql)

print("create table successfully")

# 添加数据

# 在一个conn.execute里面里面执行多个sql语句是非法的

cur.executemany("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ( %s, %s, %s, %s )",

[('Paul', 32, 'California', 20000.00),

('Allen', 25, 'Texas', 15000.00),

('Teddy', 23, 'Norway', 20000.00),

('Mark', 25, 'Rich-Mond ', 65000.00),

('David', 27, 'Texas', 85000.00),

('Kim', 22, 'South-Hall', 45000.00),

('James', 24, 'Houston', 10000.00)])

# 提交,否则重新运行程序时,表中无数据

conn.commit()

print("insert successfully")

# 查询表

sql = """

select id,NAME,AGE,ADDRESS,SALARY FROM COMPANY

"""

cur.execute(sql)

for row in cur.fetchall():

print("-" * 50) # 输出50个-,作为分界线

print("%-10s %s" % ("id", row[0])) # 字段名固定10位宽度,并且左对齐

print("%-10s %s" % ("name", row[1]))

print("%-10s %s" % ("age", row[2]))

print("%-10s %s" % ("address", row[3]))

print("%-10s %s" % ("salary", row[4]))

except MySQLdb.Error as e:

print("Mysql Error:", e)

traceback.print_exc() # 打印错误栈信息

2.3使用pymysql

2.1和2.2节使用MySQLdb,不支持Python3.x

pymysql对Python2.x和Python3.x的支持都比较好import pymysql

from contextlib import closing

import traceback

try:

# 获取一个数据库连接,with关键字 表示退出时,conn自动关闭

# with 嵌套上一层的with 要使用closing()

with closing(pymysql.connect(host='localhost', user='root', passwd='root', db='test', port=3306,

charset='utf8')) as conn:

print("connect database successfully")

# 获取游标,with关键字 表示退出时,cur自动关闭

with conn.cursor() as cur:

# 删除表

cur.execute("DROP TABLE IF EXISTS COMPANY")

# 创建表

sql = """

CREATE TABLE IF NOT EXISTS COMPANY

(ID INTEGER PRIMARY KEY NOT NULL auto_increment,

NAME TEXT NOT NULL,

AGE INT NOT NULL,

ADDRESS CHAR(50),

SALARY REAL);

"""

cur.execute(sql)

print("create table successfully")

# 添加数据

# 在一个conn.execute里面里面执行多个sql语句是非法的

cur.executemany("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ( %s, %s, %s, %s )",

[('Paul', 32, 'California', 20000.00),

('Allen', 25, 'Texas', 15000.00),

('Teddy', 23, 'Norway', 20000.00),

('Mark', 25, 'Rich-Mond ', 65000.00),

('David', 27, 'Texas', 85000.00),

('Kim', 22, 'South-Hall', 45000.00),

('James', 24, 'Houston', 10000.00)])

# 提交,否则重新运行程序时,表中无数据

conn.commit()

print("insert successfully")

# 查询表

sql = """

select id,NAME,AGE,ADDRESS,SALARY FROM COMPANY

"""

cur.execute(sql)

for row in cur.fetchall():

print("-" * 50) # 输出50个-,作为分界线

print("%-10s %s" % ("id", row[0])) # 字段名固定10位宽度,并且左对齐

print("%-10s %s" % ("name", row[1]))

print("%-10s %s" % ("age", row[2]))

print("%-10s %s" % ("address", row[3]))

print("%-10s %s" % ("salary", row[4]))

except pymysql.Error as e:

print("Mysql Error:", e)

traceback.print_exc()

3.连接mssqlimport pymssql

from contextlib import closing

try:

# 先要保证数据库中有test数据库

# 获取一个数据库连接,with关键字 表示退出时,conn自动关闭

# with 嵌套上一层的with 要使用closing()

with closing(pymssql.connect(host='192.168.100.114', user='sa', password='sa12345', database='test', port=1433,

charset='utf8')) as conn:

print("connect database successfully")

# 获取游标,with关键字 表示退出时,cur自动关闭

with conn.cursor() as cur:

# 删除表

cur.execute(

'''if exists (select 1 from sys.objects where name='COMPANY' and type='U') drop table COMPANY''')

# 创建表

sql = """

CREATE TABLE COMPANY

(ID INT IDENTITY(1,1) PRIMARY KEY NOT NULL ,

NAME TEXT NOT NULL,

AGE INT NOT NULL,

ADDRESS CHAR(50),

SALARY REAL);

"""

cur.execute(sql)

print("create table successfully")

# 添加数据

# 在一个conn.execute里面里面执行多个sql语句是非法的

cur.executemany("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ( %s, %s, %s, %s )",

[('Paul', 32, 'California', 20000.00),

('Allen', 25, 'Texas', 15000.00),

('Teddy', 23, 'Norway', 20000.00),

('Mark', 25, 'Rich-Mond', 65000.00),

('David', 27, 'Texas', 85000.00),

('Kim', 22, 'South-Hall', 45000.00),

('James', 24, 'Houston', 10000.00)])

# 提交,否则重新运行程序时,表中无数据

conn.commit()

print("insert successfully")

# 查询表

sql = """

select id,NAME,AGE,ADDRESS,SALARY FROM COMPANY

"""

cur.execute(sql)

for row in cur.fetchall():

print("-" * 50) # 输出50个-,作为分界线

print("%-10s %s" % ("id", row[0])) # 字段名固定10位宽度,并且左对齐

print("%-10s %s" % ("name", row[1]))

print("%-10s %s" % ("age", row[2]))

print("%-10s %s" % ("address", row[3]))

print("%-10s %s" % ("salary", row[4]))

except pymssql.Error as e:

print("mssql Error:", e)

# traceback.print_exc()

4.连接MongoDBimport pymongo

from pymongo.mongo_client import MongoClient

import pymongo.errors

import traceback

try:

# 连接到 mongodb 服务

mongoClient = MongoClient('localhost', 27017)

# 连接到数据库

mongoDatabase = mongoClient.test

print("connect database successfully")

# 获取集合

mongoCollection = mongoDatabase.COMPANY

# 移除所有数据

mongoCollection.remove()

# 添加数据

mongoCollection.insert_many([{"Name": "Paul", "Age": "32", "Address": "California", "Salary": "20000.00"},

{"Name": "Allen", "Age": "25", "Address": "Texas", "Salary": "15000.00"},

{"Name": "Teddy", "Age": "23", "Address": "Norway", "Salary": "20000.00"},

{"Name": "Mark", "Age": "25", "Address": "Rich-Mond", "Salary": "65000.00"},

{"Name": "David", "Age": "27", "Address": "Texas", "Salary": "85000.00"},

{"Name": "Kim", "Age": "22", "Address": "South-Hall", "Salary": "45000.00"},

{"Name": "James", "Age": "24", "Address": "Houston", "Salary": "10000.00"}, ])

#获取集合中的值

for row in mongoCollection.find():

print("-" * 50) # 输出50个-,作为分界线

print("%-10s %s" % ("_id", row['_id'])) # 字段名固定10位宽度,并且左对齐

print("%-10s %s" % ("name", row['Name']))

print("%-10s %s" % ("age", row['Age']))

print("%-10s %s" % ("address", row['Address']))

print("%-10s %s" % ("salary", row['Salary']))

print('\n\n\n')

# 使id自增

mongoCollection.remove()

# 创建计数表

mongoDatabase.counters.save({"_id": "people_id", "sequence_value": 0})

# 创建存储过程

mongoDatabase.system_js.getSequenceValue = '''function getSequenceValue(sequenceName){

var sequenceDocument = db.counters.findAndModify({

query: {_id: sequenceName},

update: {$inc:{sequence_value: 1}},

new:true

});

return sequenceDocument.sequence_value;

}'''

mongoCollection.insert_many(

[{"_id": mongoDatabase.eval("getSequenceValue('people_id')"), "Name": "Paul", "Age": "32",

"Address": "California", "Salary": "20000.00"},

{"_id": mongoDatabase.eval("getSequenceValue('people_id')"), "Name": "Allen", "Age": "25",

"Address": "Texas", "Salary": "15000.00"},

{"_id": mongoDatabase.eval("getSequenceValue('people_id')"), "Name": "Teddy", "Age": "23",

"Address": "Norway", "Salary": "20000.00"},

{"_id": mongoDatabase.eval("getSequenceValue('people_id')"), "Name": "Mark", "Age": "25",

"Address": "Rich-Mond", "Salary": "65000.00"},

{"_id": mongoDatabase.eval("getSequenceValue('people_id')"), "Name": "David", "Age": "27",

"Address": "Texas", "Salary": "85000.00"},

{"_id": mongoDatabase.eval("getSequenceValue('people_id')"), "Name": "Kim", "Age": "22",

"Address": "South-Hall", "Salary": "45000.00"},

{"_id": mongoDatabase.eval("getSequenceValue('people_id')"), "Name": "James", "Age": "24",

"Address": "Houston", "Salary": "10000.00"}, ])

for row in mongoCollection.find():

print("-" * 50) # 输出50个-,作为分界线

print("%-10s %s" % ("_id", int(row['_id']))) # 字段名固定10位宽度,并且左对齐

print("%-10s %s" % ("name", row['Name']))

print("%-10s %s" % ("age", row['Age']))

print("%-10s %s" % ("address", row['Address']))

print("%-10s %s" % ("salary", row['Salary']))

except pymongo.errors.PyMongoError as e:

print("mongo Error:", e)

traceback.print_exc()

5.连接Redis

5.1使用redisimport redis

r = redis.Redis(host='localhost', port=6379, db=0, password="12345")

print("connect", r.ping())

# 看信息

info = r.info()

# or 查看部分信息

# info = r.info("Server")

# 输出信息

items = info.items()

for i, (key, value) in enumerate(items):

print("item %s----%s:%s" % (i, key, value))

# 删除键和对应的值

r.delete("company")

# 可以一次性push一条或多条数据

r.rpush("company", {"id": 1, "Name": "Paul", "Age": "32", "Address": "California", "Salary": "20000.00"},

{"id": 2, "Name": "Allen", "Age": "25", "Address": "Texas", "Salary": "15000.00"},

{"id": 3, "Name": "Teddy", "Age": "23", "Address": "Norway", "Salary": "20000.00"})

r.rpush("company", {"id": 4, "Name": "Mark", "Age": "25", "Address": "Rich-Mond", "Salary": "65000.00"})

r.rpush("company", {"id": 5, "Name": "David", "Age": "27", "Address": "Texas", "Salary": "85000.00"})

r.rpush("company", {"id": 6, "Name": "Kim", "Age": "22", "Address": "South-Hall", "Salary": "45000.00"})

r.rpush("company", {"id": 7, "Name": "James", "Age": "24", "Address": "Houston", "Salary": "10000.00"})

# eval用来将dict格式的字符串转换成dict

for row in map(lambda x: eval(x), r.lrange("company", 0, r.llen("company"))):

print("-" * 50) # 输出50个-,作为分界线

print("%-10s %s" % ("_id", row['id'])) # 字段名固定10位宽度,并且左对齐

print("%-10s %s" % ("name", row['Name']))

print("%-10s %s" % ("age", row['Age']))

print("%-10s %s" % ("address", row['Address']))

print("%-10s %s" % ("salary", row['Salary']))

# 关闭当前连接

# r.shutdown() #这个是关闭redis服务端

5.2使用pyredisimport pyredis

r = pyredis.Client(host='localhost', port=6379, database=0, password="12345")

print("connect", r.ping().decode("utf-8"))

# 看信息

# info = r.execute("info").decode()

# or 查看部分信息

info = r.execute("info", "Server").decode()

# 输出信息

print(info)

# 删除键和对应的值

r.delete("company")

# 可以一次性push一条或多条数据

r.rpush("company", '''{"id": 1, "Name": "Paul", "Age": "32", "Address": "California", "Salary": "20000.00"}''',

'''{"id": 2, "Name": "Allen", "Age": "25", "Address": "Texas", "Salary": "15000.00"}''',

'''{"id": 3, "Name": "Teddy", "Age": "23", "Address": "Norway", "Salary": "20000.00"}''')

r.rpush("company", '''{"id": 4, "Name": "Mark", "Age": "25", "Address": "Rich-Mond", "Salary": "65000.00"}''')

r.rpush("company", '''{"id": 5, "Name": "David", "Age": "27", "Address": "Texas", "Salary": "85000.00"}''')

r.rpush("company", '''{"id": 6, "Name": "Kim", "Age": "22", "Address": "South-Hall", "Salary": "45000.00"}''')

r.rpush("company", '''{"id": 7, "Name": "James", "Age": "24", "Address": "Houston", "Salary": "10000.00"}''')

# eval用来将dict格式的字符串转换成dict

for row in map(lambda x: eval(x), r.lrange("company", 0, r.llen("company"))):

print("-" * 50) # 输出50个-,作为分界线

print("%-10s %s" % ("_id", row['id'])) # 字段名固定10位宽度,并且左对齐

print("%-10s %s" % ("name", row['Name']))

print("%-10s %s" % ("age", row['Age']))

print("%-10s %s" % ("address", row['Address']))

print("%-10s %s" % ("salary", row['Salary']))

# 关闭当前连接

r.close()

python配什么数据库_python中常见数据库有哪些相关推荐

  1. python有什么颜色_Python中常见颜色记录

    python中常见绘图的颜色选择 常见颜色 可选的颜色库 颜色名称对应的颜色码 names = { 'aliceblue': '#F0F8FF', 'antiquewhite': '#FAEBD7', ...

  2. python 映射表结构_Python 中常见的数据结构:字典、映射和散列表

    在 Python 中,字典是核心数据结构.字典可以存储任意数量的对象,每个对象都由唯一的字典键标识. 字典通常也被称为映射.散列表.查找表或关联数组.字典能够高效查找.插入和删除任何与给定键关联的对象 ...

  3. python数据库环境详解_python中MySQL数据库相关操作

    一 安装基本环境 1 简介 MySQL 基于TCP 协议之上的开发,但是网络连接后,传输的数据必须遵循MySQL的协议,封装好MySQL协议的包,就是驱动程序 MySQL 的驱动 MySQLDB 最有 ...

  4. python算法和数据结构_Python中的数据结构和算法

    python算法和数据结构 To 至 Leonardo da Vinci 达芬奇(Leonardo da Vinci) 介绍 (Introduction) The purpose of this ar ...

  5. Python之pandas:pandas中常见的数据类型转换四大方法以及遇到的一些坑之详细攻略

    Python之pandas:pandas中常见的数据类型转换四大方法以及遇到的一些坑之详细攻略 目录 pandas中常见的数据类型转换方法 T1.读取时直接转换数据类型 T2.采用astype

  6. python异步查询数据库_Python中使用aiomysql异步操作MySQL实例效果

    Python异步操作MySQL示例[使用aiomysql] 本文实例讲述了Python异步操作MySQL.分享给大家供大家参考,具体如下: 安装aiomysql 依赖 Python3.4+ async ...

  7. python怎么进行数据库增加_python中的数据库增加等操作

    python中的数据库增加等操作 日期:2019-10-10 浏览:814次 评论:0条 侧边栏 """ 1-导入模块 2-创建连接对象 3-创建游标对象 4-使用游标对 ...

  8. python自带的数据库_Python小白的数据库入门

    前言 SQL数据库数据库SQL语言入门SQL简介SQL 的作用 SQL语句分类 SQLite 数据库SQLite 中的数据类型 DDL语句创建表 删除表 修改表 DML语句添加 删除 修改 查询 Py ...

  9. 数据库设计中常见表结构的设计技巧(转)

    2019独角兽企业重金招聘Python工程师标准>>> 一.树型关系的数据表 不少程序员在进行数据库设计的时候都遇到过树型关系的数据,例如常见的类别表,即一个大类,下面有若干个子类, ...

最新文章

  1. git add remote_Git每次更新提交都提示输入密码怎么解决?
  2. R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(添加均值、标准偏差)实战
  3. 安卓的自定义的DemoApplication 出现的问题。
  4. Android keystore/Keymaster的代码导读
  5. “2021ISIG中国产业智能大会低代码峰会”即将开幕,钉钉宜搭叶周全受邀出席
  6. java项目红叉_完美解决Eclipse导入的项目上有个红叉,但不影响项目运行的问题
  7. 吃透理财三句话人人都能成百万富翁
  8. 进程函数一步步理解Linux进程(2)--进程编程进程函数
  9. 如何高效地进行敏捷开发管理
  10. 用Openswan组建Linux IPSec ---第一部分
  11. 基于JAVA+SpringMVC+Mybatis+MYSQL的二手房交易系统
  12. SharePoint 上传附件
  13. 为什么程序员纷纷反对微软收购GitHub?
  14. UART 初始化及使用示例代码
  15. HDU2092 整数解【暴力+韦达定理】
  16. 在asp.net 中实现只允许数字输入的文本框
  17. 基于S3C2440A的DM9000A的调试笔记
  18. Halo博客 -- ③ 本地运行
  19. PS图层+移动工具(2)复制删除快捷键 图层分组 前景色填充
  20. NYOJ-71:独木舟上的旅行

热门文章

  1. 第十三天-企业应用架构模式-对象-关系元数据映射模式
  2. 分布式Redis深度历险-复制
  3. linux源代码剖析之include-asm
  4. 团伙 并查集_BZOJ 1370 Baltic2003 Gang团伙 并查集
  5. iF.SVNAdmin
  6. 【数据结构笔记04】线性结构:线性表及其实现
  7. 《Linux Shell脚本攻略》读书笔记第三章 以文件之名
  8. LA 2572 Viva Confetti (Geometry.Circle)
  9. java collection 遍历_Java for循环对集合的遍历
  10. MySQL5.5编译工具configure向cmake过渡指南