# -*- coding: utf-8 -*-
"""
Created on Sun Nov 18 19:25:01 2018 @author: wangm
""" # 使用Python自带的sqlite3模块
# 创建数据库中的表、在表中插入数据、以及在输出中获取数据并对行进行计数
#!/usr/bin/env python3
# 导入sqlite3模块
import sqlite3 # 创建一个代表数据库的连接对象,此处使用专用名词 ':memory:' 在内存中创建一个数据库
# 也可以使用其他名字,此时创建的数据库会被保存在你的工作目录,或者自己指定的路径下
con = sqlite3.connect(':memory:')
#con = sqlite3.connect('mydatabase')
# 创建表sales,具有四个属性
# 此处query内有多行,使用 “”“
query = """create table sales
(customer varchar(20),
product varchar(40),
amount float, date DATE);"""
# 执行query中的sql命令
con.execute(query)
# 将对数据库做的修改提交,即保存到数据库中
con.commit() # 在表中插入四行数据
data = [('AAA', 'Apple', 10000.0, '2018-01-01'),
('BBB', 'Huawei', 5000.0, '2018-02-01'),
('CCC', 'Mi', 3000.0, '2018-03-01')]
# 此处statement只有一行,所以可以用 “
# 此处 ? 为占位符,在connect对象的con.execute()或con.executemany()方法中,需要提供
# 一个包含四个值得元组,元组中的值会按位置替换到sql语句中
# 这种替换的方法还有一个好处是可以防止SQL注入攻击
statement = "insert into sales values(?, ?, ?, ?)"
# 为data中的每条数据元组都执行statement中的命令,此处执行四次
con.executemany(statement, data)
# 注意此处不能用con.execute()方法
# 出错信息:ProgrammingError: Incorrect number of bindings supplied. The current statement uses 4, and there are 3 supplied.
#con.execute(statement, data)
con.commit() # 查询sales表
# 执行SQL语句"select * from sales",并将结果赋给一个光标对象cursor
cursor = con.execute("select * from sales")
# fetchall()取出SQL返回结果的所有行,并将这些行赋给rows
rows = cursor.fetchall()
# rows 的类型 <class 'list'>
#print(type(rows)) # 输出查询到的每一行,并对行计数
#row_counter = 0
#for row in rows:
#print(row)
#row_counter += 1
#print('row_counter is %d' % (row_counter)) """
输出结果:
('AAA', 'Apple', 10000.0, '2018-01-01')
('BBB', 'Huawei', 5000.0, '2018-02-01')
('CCC', 'Mi', 3000.0, '2018-03-01')
row_counter is 3
""" # 根据上述的这些对SQL的操作,和前面的关于对CSV文件、Excel文件的操作,就可以很简单的
# 将一个CSV文件或Excel文件存储到数据库中,成为数据库中的一张表
# 以CSV文件为例,即读取CSV文件每一行数据,使用insert,插入到数据库中 # 除了上述的创建数据库、创建表、向表中插入数据、查询表中的数据之外
# 也可以在con.execute()中执行其他的插删改操作 # 插入:
con.execute("insert into sales values(?, ?, ?, ?)", ('DDD', 'MeiZu', 2000.0, '2018-04-01'))
con.commit() cursor = con.execute("select * from sales")
rows = cursor.fetchall()
row_counter = 0
for row in rows:
print(row)
row_counter += 1
print('row_counter is %d' % (row_counter)) # 修改
temp = [2500.0, '2018-05-01', 'DDD']
con.execute("update sales set amount=?, date=? where customer=?;", temp)
con.commit()
cursor = con.execute("select * from sales")
rows = cursor.fetchall()
row_counter = 0
for row in rows:
print(row)
row_counter += 1
print('row_counter is %d' % (row_counter)) # 删除
temp = ['CCC']
con.execute("delete from sales where customer=?;", temp)
con.commit()
cursor = con.execute("select * from sales")
rows = cursor.fetchall()
row_counter = 0
for row in rows:
print(row)
row_counter += 1
print('row_counter is %d' % (row_counter)) """
输出结果:
('AAA', 'Apple', 10000.0, '2018-01-01')
('BBB', 'Huawei', 5000.0, '2018-02-01')
('CCC', 'Mi', 3000.0, '2018-03-01')
('DDD', 'MeiZu', 2000.0, '2018-04-01')
row_counter is 4
('AAA', 'Apple', 10000.0, '2018-01-01')
('BBB', 'Huawei', 5000.0, '2018-02-01')
('CCC', 'Mi', 3000.0, '2018-03-01')
('DDD', 'MeiZu', 2500.0, '2018-05-01')
row_counter is 4
('AAA', 'Apple', 10000.0, '2018-01-01')
('BBB', 'Huawei', 5000.0, '2018-02-01')
('DDD', 'MeiZu', 2500.0, '2018-05-01')
row_counter is 3 """

上述代码(以Python内置的sqlite为例)展示了如何连接数据库,并在数据库中新建table,并对table进行增删改查操作

而下面在我准备连接MySQL时,出现下列错误:

#!/usr/bin/env python3
import csv
import MySQLdb
#from datetime import datetime, date input_file = 'D:\wangm\Documents\learning\code\python\supplier_data.csv' con = MySQLdb.connect(host='localhost', port=3306, db='test', user='root', passwd='')
c = con.cursor()
"""
file_reader = csv.reader(open(input_file, 'r', newline=''))
header = next(file_reader)
for row in file_reader:
data = []
for column_index in range(len(header)):
data.append(str(row[column_index]).lstrip('$').replace(',', '').strip())
print(data)
c.execute("insert into supplier values (%s, %s, %s, %s, %s);", data)
con.commit()
print('')
"""

错误信息:OperationalError: (2059, <NULL>)

在网上找到的错误原因:MySQL8.0使用的新的认证加密方式导致了这种犯错误

具体可以查看此处:https://blog.csdn.net/rbborb/article/details/80541468

根据上述文章,我尝试更新以下相关的库,更新后相关库的版本如下:

再次运行上述代码,依然报错。

上述文章还提供另一种方法,卸载MySQL,选择之前版本

使用Python与数据库交互的更多相关文章

  1. Python 与数据库交互

    安装:pip3 install pymysql 引入模块在python3里:from pymysql import * 使用步骤:1.创建Connection对象,用于建立与数据库的连接,创建对象调用 ...

  2. python与数据库交互的模块pymysql

    一.Mysql 1.前提 pip install pymysql import pymysql 2.详情 Connection对象 =====>用于连接数据库 用于建立与数据库的连接 创建对象: ...

  3. 使用Python管理数据库

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

  4. 14.python与数据库之mysql:pymysql、sqlalchemy

    相关内容: 使用pymysql直接操作mysql 创建表 查看表 修改表 删除表 插入数据 查看数据 修改数据 删除数据 使用sqlmary操作mysql 创建表 查看表 修改表 删除表 插入数据 查 ...

  5. python SQLite说一点点, python使用数据库需要注意的几点

    SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成. Python就 ...

  6. Python操作数据库之 MySQL

    Python操作数据库之MySQL 一.安装Python-MySQLdb模块 Python-MySQLdb是一个操作数据库的模块,Python 通过它对 mysql 数据实现各种操作. 如果要源码安装 ...

  7. Python与Mysql交互

    #转载请联系 在写内容之前,先放一张图,bling- 这张图算是比较详细的表达出了web开发都需要什么.用户访问网页,就是访问服务器的网页文件.这些网页文件由前端工程师编写的.服务器通常用nginx/ ...

  8. Python与数据库[2] -> 关系对象映射/ORM[0] -> ORM 与 sqlalchemy 模块

    ORM 与 sqlalchemy 1 关于ORM / About ORM 1.1 ORM定义 / Definition of ORM ORM(Object Relational Mapping),即对 ...

  9. python部分 + 数据库 + 网络编程

    PS:附上我的博客地址,答案中略的部分我的博客都有,直接原标题搜索即可.https://www.cnblogs.com/Roc-Atlantis/ 第一部分 Python基础篇(80题) 为什么学习P ...

随机推荐

  1. [LOJ#6002]「网络流 24 题」最小路径覆盖

    [LOJ#6002]「网络流 24 题」最小路径覆盖 试题描述 给定有向图 G=(V,E).设 P 是 G 的一个简单路(顶点不相交)的集合.如果 V 中每个顶点恰好在 P 的一条路上,则称 P 是  ...

  2. BZOJ3534 [Sdoi2014]重建 【矩阵树定理】

    题目 T国有N个城市,用若干双向道路连接.一对城市之间至多存在一条道路. 在一次洪水之后,一些道路受损无法通行.虽然已经有人开始调查道路的损毁情况,但直到现在几乎没有消息传回. 辛运的是,此前T国政府 ...

  3. formData使用总结

    1.formData基本使用 //可以从form元素初始化一个FormData对象,或者new一个空对象 var formData = new FormData([fromElement]); //可 ...

  4. java面试题之HashMap和HashTable底层实现的区别

    HashMap和HashTable的区别: 相同点:都是以key和value的形式存储: 不同点: HashMap是不安全的:HashTable线程安全的(使用了synchronized关键字来保证线 ...

  5. Ubuntu12.04 64bit版本下载Android源码完整教程

    首先去官网http://source.android.com/source/initializing.html可以看到完整的安装教程.不过一般情况下,按照这个教程是无法一步到位的,因为中途肯定会遇到很 ...

  6. SharePoint 2013 App 开发—App开发概述

    基于安全性的考虑,SharePoint App 不能像其它两种方式一样,直接使用安全性更高的服务端代码的API.Javascript 扮演极为重要的角色,在SharePoint App中与ShareP ...

  7. LeetCode OJ——Unique Binary Search Trees II

    http://oj.leetcode.com/problems/unique-binary-search-trees-ii/ 一题要求得出所有树的种类数,二题要求得出所有树. 在一题的基础上修改代码, ...

  8. AC日记——让我们异或吧 洛谷 P2420

    题目描述 异或是一种神奇的运算,大部分人把它总结成不进位加法. 在生活中…xor运算也很常见.比如,对于一个问题的回答,是为1,否为0.那么: (A是否是男生 )xor( B是否是男生)=A和B是否能 ...

  9. python装饰器的深度探究

    1.讲装饰器一般讲到这种代码就可以了,但这篇博客会介绍更多: def deco(func): def wrapper(): print("start") func() #调用函数 ...

  10. upper_bound——自己的实现

    int BSearch() { int ln(1),rn(n+1); while(ln+1<rn) { int mid=(ln+rn)>>1; if (Check(mid)) { l ...