python3——pymysql
python2——mysqldb
安装方法
mysql -u 用户名 -p 密码 是连接数据库服务器的命令。要求你输入自己连接数据库的用户名和密码。
考虑密码如果直接明文写在这条命令行上,有些不方便(怕被别人看到),可以像你写的那样,只输入:mysql -u 用户名 -p 然后回车,此时提示你输入密码,这时候输入的密码就不再是明文的了。
数据库连接存在一些前提:
1、已经创建了数据库 resonant_earth
2、在数据库中已经创建了表characters
3、已知表的字段
import MySQLdb
db = MySQLdb.connect("localhost", "root", "****", "resonant_earth", charset='utf8' )
cursor = db.cursor()# 使用cursor()方法获取操作游标
cursor.execute("SELECT * FROM characters limit 3")# 使用execute方法执行SQL语句
data = cursor.fetchone()# 使用 fetchone() 方法获取一条数据
db.close()# 关闭数据库连接
import MySQLdb
...
# SQL 插入语句,对于多行的语句用三引号""",不需要加分号
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
# SQL 删除语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
# SQL 更新语句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
try:
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
# Rollback in case there is any error
db.rollback()
# 关闭数据库连接
db.close()
事务机制可以确保数据一致性。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。
# SQL删除记录语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
try:
# 执行SQL语句
cursor.execute(sql)
# 向数据库提交
db.commit()
except:
# 发生错误时回滚
db.rollback()
假定在程序效率和关键过程相当且不计入缓存等措施的条件下,读 写任何类型的数据都没有直接操作文件来的快,不论MSYQL过程如何,最后都要到磁盘上去读这个“文件”(记录存储区等效),所以当然这一切的前提是只读 内容,无关任何排序或查找操作。详情见此文
import csv
s=[[1,3,4],[4,5,7],[2,4,6]]
out = open('try2.csv','a', newline='')#追加模式,避免出现空行
csv_write = csv.writer(out,dialect='excel')
for i in s:
csv_write.writerow(i)
out.close()
python向mysql插入数据但是在mysql终端查不到,参见
使用python的MySQLdb库插入数据,插入成功后查询不出结果的问题,是因为innodb的autocommit问题,需要动态设置为开启,设置代码:
conn = MySQLdb.connect(host, user, pasword, db, charset='utf8')
conn.autocommit(True)
但是,执行插入插入数据后需要commit(但我没加也成功了,可能因为我的引擎是myisam)
cursor.execute(sql)
conn.commit()
插入数据的三种方法
#方法一,传入参数
sql = 'insert into monday values(%s,%s,%s)'
args = (3,4,5)
cursor.execute(sql,args)
#方法二
cursor.execute('insert into monday values(%s,%s,%s)'%(1,2,3))
#方法三
cursor.execute('insert into monday values(1,2,3)')
数据库操作的大体流程见
import MySQLdb
import csv
db = MySQLdb.connect(host='localhost',port=3306,user='root',password='***',db='resonant_earth',charset='utf8')
db.autocommit(True)
cursor = db.cursor()
sql = 'insert into clone_char values(0,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'#我的第一列是自增的,所以随便写一个数字不影响
with open('try.csv','r', newline='') as f:
reader = csv.reader(f)
for i in reader:
args = tuple(list(map(float,i)))
cursor.execute(sql,args)
cursor.execute('select * from monday')
db.commit()#请注意:用commit()提交事务之后,才能真正的插入数据
data=cursor.fetchall()
cursor.close()
db.close()# 关闭数据库连接
多线程操作类