如何使用Python进行数据库操作?
记得好像是三年前吧,还在公司工位上加班,领导临时让做个数据清理,说是有张表里头全是脏数据。我当时脑子里只想着MySQL,然后直接pip装了个pymysql,结果库名密码输错了,连了半天都没连上,快被气笑了。后来才发现,账号里有个小写l和数字1,看花眼了……真就血压上来了。
Python操作数据库,主要靠几个库
其实你要是用得多的,像pymysql和sqlite3,还有啥psycopg2(这个是连PostgreSQL的哈),都挺好用。最简单那种,你用sqlite3,连个本地文件就完事了,啥服务都不用起,特适合写demo和练习。 我记得有一次在麦当劳,等外卖的时候就直接掏出笔记本,写个sqlite脚本测试点东西,旁边大爷还以为我炒股。
来,代码你随便看下:
import sqlite3# 连接数据库,文件不存在会自动创建
conn = sqlite3.connect('my_test.db')
cursor = conn.cursor()
# 创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
''')
# 插入数据
cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('小王', 22))
conn.commit()
# 查询数据
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()
for row in rows:
print(row)
cursor.close()
conn.close()
上面这玩意儿你直接复制粘贴跑,基本没啥问题,除非你把路径输错了或者硬盘满了,哈哈。
你要是连MySQL,稍微多俩步骤
比如你在公司开发环境要连线上MySQL,这时候pymysql肯定用得多。还是那句话,用户名密码别写错,尤其是有那种特别抽象的数据库权限,真心能折腾你一晚上。
举个栗子,去年有一次我在公司楼下抽烟,有个小伙子问我“哥,pymysql插入中文为啥报错?”。我当时还以为是编码没调好,结果一查,是表结构建的有点问题。哎,这种小细节要注意。
pymysql连接MySQL基本就那几步:
import pymysqlconn = pymysql.connect(
host='localhost',
user='root',
password='你的密码',
db='testdb',
charset='utf8mb4'
)
cursor = conn.cursor()
# 插入
cursor.execute("INSERT INTO users (name, age) VALUES (%s, %s)", ("老李", 30))
conn.commit()
# 查询
cursor.execute("SELECT * FROM users")
for row in cursor.fetchall():
print(row)
cursor.close()
conn.close()
记住,中文乱码十有八九是charset没设utf8mb4,这坑我踩过好几次,每次查半天头都大。
就是有时候你觉得能直接拼SQL很爽,但别忘了参数化,否则有SQL注入那麻烦就大了。前阵子有个朋友饭局上问我,“东哥,为什么要用?或者%s?”其实就是让数据库帮你转义一下,防止被黑。
还有就是操作完了记得commit,尤其是insert和update,不然啥都不生效。这个我在群里见太多新手写完一顿操作,结果啥数据都没加上,原地怀疑人生。
另外,有事没事加个异常捕获,别脚本一挂啥都不知道。举个最简单的:
try:
conn = pymysql.connect(……)
cursor = conn.cursor()
# ... 你的数据库操作 ...
except Exception as e:
print("数据库连接出错:", e)
finally:
cursor.close()
conn.close()
ORM这种东西吧,你用不用都行
有些朋友上来就用SQLAlchemy啥的,也挺好,反正不难,就是语法再包一层。你要是嫌写SQL太烦,就可以试试,但别太依赖自动映射,复杂业务最后还是得自己写SQL。
唉,对了,刚刚媳妇叫我去倒垃圾,我先去一趟,回来再聊点连接池啥的(其实就是sqlalchemy加点pool参数),真的有坑,我上次写爬虫没用连接池结果MySQL直接被我连崩了……
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领