• 使用数据库驱动连接数据库 (Connection对象)
  • 打开游标(Cursor对象),并通过它执行SQL语句(execute方法)
  • 提交操作(commit())
  • 关闭连接(close())
  • ORM将表记录映射为对象

1,SQLite

  Python内置了SQLite3,查看sqlite3文档

import sqlite3

conn = sqlite3.connect('数据库.db')
cur = conn.cursor() # 建表
cur.execute('create table user '
'(id varchar(20) primary key, name varchar(20), password varchar(20))')
# 插值
cur.execute('INSERT INTO user values("1","April","1234567890")')
# 提交
conn.commit()
# 关闭连接
conn.close()

  note! 当SQL语句需要使用到Python程序中的变量值时,不要使用Python中字符串操作来组合查询,因为这样容易受到SQL注入攻击。解决方法是使用DB-API的参数替代:用?作为占位符,然后提供 值的元组 作为游标execute()方法的第二个参数。 (其他数据库模块可能使用不同的占位符,例如%s 或:1)。

import sqlite3

conn = sqlite3.connect("数据库.db")
cur = conn.cursor() name = 'April'
# SQL语句中使用Python程序中的变量时
# Never do this -- insecure!
#cur.execute("SELECT * FROM user WHERE name = '%s'" % name) # Do this instead
t = ('April',)
cur.execute('SELECT * FROM user WHERE name=?', t)
print(cur.fetchone())
# 用for循环获取execute()查找返回的结果【还有fetchone()/fetchall()等方法】
for row in cur.execute('select * from user'):
print(row)
cur.execute('select "name","password" from user where id=?', ('',))
print(cur.fetchall())
print(cur.rowcount) # rowcount表示上一操作影响的行数,-1表示该游标未执行语句或者接口未确定最后一个操作的行数 try:
# Larger example that inserts many records at a time
users = [('', 'A', ''),
('', 'B', ''),
('', 'C', ''),
]
cur.executemany('INSERT INTO user VALUES (?,?,?)', users)
except sqlite3.IntegrityError as e:
print('插入失败:',e)
finally:
conn.commit()
conn.close()

2,MySQL

  安装:注意设置root密码不要忘记,以后连接数据库时要使用哦

  修改MySQL数据库默认数据存储的位置:将 C:\ProgramData\MySQL\MySQL Server 5.7 中 my.ini文件的 " datadir =... " 修改为目标路径,注意ProgramData文件夹是被隐藏的

  • 在实验室电脑上安装MySQL时,配置到starting server时卡住了,重装好几次都是这样。 在开始菜单里无法打开MySQL Command Line Client.最后查阅网上资料,解决方法如下:

  cmd命令下进入MySQL安装目录(C:\Program Files\MySQL\MySQL Server 5.7\bin),输 入 mysql -u root -p ,出现Enter Password,这时不用输入密码,直接回车便进入了

MySQL数据库。

  后来查看安装日志(C:\ProgramData\MySQL\MySQL Installer for Windows\Logs),发现出现  mysql-installer Information: 10 : 2017-10-17T07:07:38.244359Z 1 [Warning]
root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option. 不知是否有关。
  更改root密码:set password for root@localhost = password('password');

  问题是以后都得这样登录Mysql太繁琐

  MySQL语句:http://www.cnblogs.com/picaso/archive/2012/05/17/2505895.html

  

Python连接Mysql

  安装MySQL数据库驱动(MySQL driver) pip install mysql-connector(mysql.connector模块),若失败,可安装pip install mysql-connector==2.1.4;或者安装 pymysql

pip install PyMySql (PyMySql模块);

  具体连接数据库以及各种操作与SQLite相似;

  https://dev.mysql.com/doc/connector-python/en/connector-python-example-connecting.html

使用mysql.connector:

import mysql.connector
from mysql.connector import errorcode conn = mysql.connector.connect(user = 'root',password = 'password', host = '127.0.0.1', database = 'test')
cur = conn.cursor()
# 建表
try:
cur.execute('create table teacher (id varchar(20) primary key, name varchar(20))')
except mysql.connector.Error as err:
if err.errno == errorcode.ER_TABLE_EXISTS_ERROR:
print('already exists!')
else:
print(err.msg)
else:
print('建表成功!') cur.close()
conn.close()

使用pymysql:

import pymysql

conn = pymysql.connect(user = 'root',password = 'password', host = '127.0.0.1', database = 'test')
# 建表
try:
with conn.cursor() as cur: #相当于cur = conn.cursor 打开游标,不用再去关闭
# Create a new record
sql = "INSERT INTO teacher (id, name) VALUES (%s, %s)"
cur.execute(sql , ('', 'EE'))
# connection is not autocommit by default. So you must commit to save
# your changes.
conn.commit()
except:
pass try:
with conn.cursor() as cur:
# Read a single record
sql = "SELECT id,name FROM teacher WHERE id = %s"
cur.execute(sql, ('',))
result = cur.fetchone()
print(result)
except:
pass
finally:
conn.close()

3, ORM   Object-Relational Mapping,把关系数据库的表结构映射到对象上

  ORM框架:把数据库的一行转化为程序中的一个对象,安装SQLAlchemy模块,pip install SQLALchemy

  Python的DB-API返回的表数据结构为 一个包含tuple的list,每个tuple表示表的一行记录;ORM就是将这样的一个tuple表示为一个class的实例,将一张表转化为一个类。所以向表中插入一行就相当于添加一个对应的对象。

  

from sqlalchemy import Column,String,create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base # 创建对象基类
Base = declarative_base() class Teacher(Base):
# 表名
__tablename__ = 'teacher'
# 表结构
id = Column(String(20), primary_key=True)
name = Column(String(20)) # 初始化数据库连接:
engine = create_engine('mysql+mysqlconnector://root:password@localhost:3306/test')
# 创建DBSession类型:
DBSession = sessionmaker(bind=engine) # 添加记录(把对象添加到session)
session = DBSession() # DBSession对象可视为当前数据库连接
new_teacher = Teacher(id= '', name ='Anna')
session.add(new_teacher)
session.commit()
session.close() # 查询记录
session = DBSession()
# 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
user = session.query(Teacher).filter(Teacher.id=='').one()
print('type:', type(user))
print('name:', user.name)
session.close()

  

  

Python处理数据库的更多相关文章

  1. python操作数据库

    一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的l ...

  2. python+mysql数据库的简单操作

    最近接了一个任务,测试某项类似于收益情况报表的功能,因计算公式复杂,单纯手算过于复杂,所以想到写成脚本 根据python的分治原则,先整了几个函数用于实现计算逻辑,后发现数据输入过于繁琐,所以决定使用 ...

  3. python 从数据库表生成model

    python 从数据库表生成model 找了很久才找到这个,我是新手... 现在已有建好的数据库,需要基于原有数据做数据分析的web应用,我选择python+Tornado ,由于不想写SQL语句,就 ...

  4. 运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库

    运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 运 ...

  5. python之数据库操作(sqlite)

    python之数据库操作(sqlite) 不像常见的客户端/服务器结构范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分.所以主要的通信协议是在编程语言内的直接A ...

  6. python操作数据库之批量导入

    python操作数据库之批量导入 Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进. Python具有丰富和强大的库.它常被昵称为胶水语言,能够把用其他语言制作的 ...

  7. 使用Python管理数据库

    使用Python管理数据库   这篇文章的主题是如何使用Python语言管理数据库,简化日常运维中频繁的.重复度高的任务,为DBA们腾出更多时间来完成更重要的工作.文章本身只提供一种思路,写的不是很全 ...

  8. Python实现数据库一键导出为Excel表格

    依赖 Python2711 xlwt MySQLdb 数据库相关 连接 获取字段信息 获取数据 Excel基础 workbook sheet 案例 封装 封装之后 测试结果 总结 数据库数据导出为ex ...

  9. 零基础学Python--------第11章 使用Python操作数据库

    第11章 使用Python操作数据库 11.1 数据库编程接口 在项目开发中,数据库应用必不可少.虽然数据库的种类有很多,如SQLite.MySQL.Oracle等,但是它们的功能基本都是一样的,为了 ...

  10. python读取数据库并把数据写入本地文件

    一,介绍 上周用jmeter做性能测试时,接口B传入的参数需要依赖接口A生成的借贷申请ID,接口A运行完需要把生成的借贷申请ID导出来到一个文件,作为参数传给接口B,刚开始的时候,手动去数据库倒, 倒 ...

随机推荐

  1. html2canvas文字重叠(手机端)

    发现情况: 1.设置文字居中,文字自动换行后文字有重叠   text-align: center; 解决办法: text-align: left; text-align: justify;等 2.使用 ...

  2. java基础--集合框架的认识

    一.集合框架 对于不知道存储数量和更复杂的方式存储对象用集合框架. 其中有几个常用的接口和实现类:Collection父接口.List接口,Set接口,Map接口, ArrayList实现类.Link ...

  3. 剑指offer:顺时针打印矩阵

    问题描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...

  4. JQuery 数组获取和删除元素

    <script> var target = []; target [0] = "aaa000"; target [1] = "bbb111"; ta ...

  5. 【Code Tools】Java微基准测试工具JMH之中级篇

    一.JMH中的基本概念 1)Mode Mode 表示 JMH 进行 Benchmark 时所使用的模式.通常是测量的维度不同,或是测量的方式不同.目前 JMH 共有四种模式: 1.Throughput ...

  6. hdoj4859海岸线

    1.地图周围再加一圈海 2.周长最多为sum=n*(m+1)+m*(n+1).如果有邻接相同,要减1.最小割使相同最少.结果为sum-最小割 3.但是有E海滩,两边都能选.让E到S,T都连一个很大的数 ...

  7. 同一个世界(erlang解题答案)

    最近玩同一个世界,才几关就把3次提示用完了,十分气愤, 于是写了程序来解~~~ o(^▽^)o 以2-1为例子,题目如下 以0代表白色,1代表黑色,抽象的就是这样的 ----------------- ...

  8. hql 函数大全

    序号  函数名称 说明 类型 支持 使用方法 备注 1 ABS(n) 取绝对值 数学函数 JPAQL HQL ABS(column_name[数字类型对象属性])   2 SQRT(n) 取平方根 数 ...

  9. 嵌入式Linux开发之uboot启动Linux整体流程分析

    嵌入式Linux开发之uboot启动Linux整体流程分析 Uboot全称Universal Boot Loader,一个遵循GPL协议的的开源项目,其作用是引导操作系统,支持引导linux.VxWo ...

  10. 【算法】祭奠spfa 最短路算法dijspfa

    题目链接 本题解来源 其他链接 卡spfa的数据组 题解堆优化的dijkstra 题解spfa讲解 来自以上题解的图片来自常暗踏阴 使用前向星链表存图 直接用队列优化spfa struct cmp { ...