python跟数据库连接,python与数据库之间的连接
# -*-编码:utf-8 -*-
创建于Sun 2018年11月18日19:25:01
@作者:wangm
#使用Python附带的sqlite3模块
#在数据库中创建一个表,将数据插入表中,并在输出和计数行中获取数据。
#!/usr/bin/env python3
#导入sqlite3模块
导入sqlite3
#创建代表数据库的连接对象。这里,使用特殊术语:memory:在内存中创建一个数据库。
#您也可以使用其他名称。此时,创建的数据库将保存在您的工作目录中,或者您自己指定的路径中。
con=sqlite3.connect(:memory:)
# con=sqlite3 . connect( my database )
#创建具有四个属性的sales表
#此处的查询中有多行,请使用"""
查询= 创建销售表
(客户varchar(20)、
产品varchar(40),
金额浮动,日期日期);
#在查询中执行sql命令
con.execute(查询)
#提交对数据库所做的更改,即保存到数据库中。
con.commit()
#在表格中插入四行数据
data=[(AAA ,苹果,10000.0, 2018-01-01 ),
( BBB ,华为,5000.0, 2018-02-01 ),
( CCC , Mi ,3000.0, 2018-03-01)]
#语句在这里只有一行,所以可以用“
#这里?是占位符。在connect对象的con.execute()或con.executemany()方法中,您需要提供
#一个包含四个值的元组,元组中的值会按位置替换到sql语句中。
#这种替代方法的另一个优点是可以防止SQL注入攻击。
statement=插入销售值(?)
#对数据中的每个数据元组执行语句中的命令,这里是四次。
con.executemany(语句,数据)
#注意,这里不能使用con.execute()方法。
#错误消息:编程错误:提供的绑定数量不正确。当前语句使用4,提供了3个。
#con.execute(语句,数据)
con.commit()
#查询销售表
#执行SQL语句 select * from sales ,并将结果分配给游标对象cursor。
cursor=con . execute( select * from sales )
# fetchall()取出SQL返回的所有行,并将它们分配给行。
rows=cursor.fetchall()
#行的类型类“列表”
#print(类型(行数))
#输出查询的每一行,并计算行数
#row_counter=0
#对于行中的行:
#打印(行)
#row_counter=1
#print(row_counter是%d % (row_counter))
输出结果:
( AAA ,苹果,10000.0, 2018-01-01 )
( BBB ,华为,5000.0, 2018-02-01 )
( CCC , Mi ,3000.0, 2018-03-01 )
row_counter为3
#根据上面对SQL的操作,以及之前对CSV文件和Excel文件的操作,可以很简单
#在数据库中存储一个CSV文件或Excel文件,成为数据库中的一个表
#以CSV文件为例,即读取CSV文件中的每一行数据,使用insert,插入到数据库中。
#除了上面提到的数据库创建、表创建、向表中插入数据以及在表中查询数据
#您还可以在con.execute()中执行其他插入和删除操作
#插入:
con.execute(插入销售值(?),( DDD ,魅族,2000.0, 2018-04-01 ))
con.commit()
cursor=con . execute( select * from sales )
rows=cursor.fetchall()
row_counter=0
对于行中的行:
打印(行)
row_counter=1
print(row_counter是%d % (row_counter))
#修改
temp=[2500.0, 2018-05-01 , DDD]
con.execute(更新销售集金额=?日期=?其中客户=?温度)
con.commit()
cursor=con . execute( select * from sales )
rows=cursor.fetchall()
row_counter=0
对于行中的行:
打印(行)
row_counter=1
print(row_counter是%d % (row_counter))
#删除
temp=[CCC]
con . execute( delete from sales where customer=?温度)
con.commit()
cursor=con . execute( select * from sales )
rows=cursor.fetchall()
row_counter=0
对于行中的行:
打印(行)
row_counter=1
print(row_counter是%d % (row_counter))
输出结果:
( AAA ,苹果,10000.0, 2018-01-01 )
( BBB ,华为,5000.0, 2018-02-01 )
( CCC , Mi ,3000.0, 2018-03-01 )
( DDD ,魅族,2000.0, 2018-04-01 )
row_counter为4
( AAA ,苹果,10000.0, 2018-01-01 )
( BBB ,华为,5000.0, 2018-02-01 )
( CCC , Mi ,3000.0, 2018-03-01 )
( DDD ,魅族,2500.0, 2018-05-01 )
row_counter为4
( AAA ,苹果,10000.0, 2018-01-01 )
( BBB ,华为,5000.0, 2018-02-01 )
( DDD ,魅族,2500.0, 2018-05-01 )
row_counter为3
上面的代码(以Python内置的sqlite为例)展示了如何连接数据库,在数据库中创建新表,以及添加、删除和检查表。
当我要连接到MySQL时,出现了以下错误:
#!/usr/bin/env python3
导入csv
导入MySQLdb
#从日期时间导入日期时间,日期
input _ file= D:\ wangm \ Documents \ learning \ code \ python \ supplier _ data . CSV
con=mysqldb . connect(host= localhost ,port=3306,db=test ,user=root ,passwd=1126 )
c=图标光标()
file _ reader=CSV . reader(open(input _ file, r ,newline= ))
header=next(file_reader)
对于file_reader中的行:
数据=[]
对于范围内的column _ index(len(header)):
data . append(str(row[column _ index])。lstrip($ )。替换(,, )。strip())
打印(数据)
c.execute(插入到供应商值(%s,%s,%s,% s);,数据)
con.commit()
打印()
错误消息:OperationalError: (2059,NULL)
在网上找到的错误原因:MySQL8.0使用的新的认证加密方法导致了这个错误。
根据上面的文章,我尝试更新了以下相关库,相关库的更新版本如下:
再次运行上述代码仍然会出现错误。
以上文章还提供了另一种卸载MySQL并选择之前版本的方法。
请注明出处。
版权归作者所有:来自博主的原创作品,荒诞又年轻。转载授权请联系作者,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。