MySQL-Python学习笔记

安装MySQL数据库Python Connector

目前尝试使用了两种不同的python package连接mysql数据库,根据使用体验推荐sqlalchemy包,参考廖神的文章。同时,本文记录了mysql.connector的使用和Debug笔记。(部分代码转载于以上链接)

使用mysql-connector

安装package

pip install mysql-connector-python

连接mysql数据库

import mysql.connector as mc

mydb = mysql.connector.connect(
  host="localhost",       # 数据库主机地址
  user="yourusername",    # 数据库用户名
  passwd="yourpassword"   # 数据库密码
  database="database"     # 访问的数据库名
)

运行SQL query

执行单条或多条SQL语句
mycursor = mydb.cursor()
mycursor.execute("ALTER TABLE sites ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY; SHOW TABLES;")  # 直接运行query

sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
val = ("RUNOOB", "https://www.runoob.com")
mycursor.execute(sql, val)  # 类似%-formatting的方式填充sql语句并执行
mydb.commit()  # 数据表内容有更新,需要使用该语句,但使用过程中发现不commit依然完成了插入数据等操作
print(mycursor.rowcount, "条记录插入成功。")

mydb.close()  # close connector以免出现数据库访问冲突导致的死锁问题
批量插入数据
# formatting形式和python不同,无论插入数据类型为何都要使用%s(而非%d,%f等)
sql = "INSERT INTO sites (name, url) VALUES (%s, %s)" 
val = [
  ('Google', 'https://www.google.com'),
  ('Github', 'https://www.github.com'),
  ('Taobao', 'https://www.taobao.com'),
  ('stackoverflow', 'https://www.stackoverflow.com/')
]
 
mycursor.executemany(sql, val)
mydb.commit()
print(mycursor.rowcount, "记录插入成功。")
返回查询结果
myresult = mycursor.fetchone()   # fetchone() 获取一条记录

# fetchall() 获取所有记录,返回值为list of tuples
myresult = mycursor.fetchall()
问题和Debug

python connector在insert数据到数据库中时,因为mySQL的data size限制,很容易出现server has gone away的error。

解决办法:

  1. 在每次打开mySQL service后,运行SQL语句:
    set global innodb_buffer_pool_size=2048M  # or a bigger value
    set global max_allowed_packet=2048M  # or a bigger value
    
  2. 修改mySQL配置文件my.ini (for windows)
    修改内容同上

空值问题解决:

  • 对于字符数据,直接将空值改为’NULL’
  • 对于数值型,直接使用NULL会报错,目前没有找到普适的方法,可以尝试将空值设置为该列不存在的值,在导入数据库后,将该值替换回NULL

使用sqlalchemy

。。。待更新

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值