跟数据库打交道是每个程序员的必修课。要是你还在为Python怎么连数据库发愁,那可得好好认识下pyodbc这个香饽饽了。它就像个万能翻译官,让Python能跟各种数据库自由对话,SQL Server、MySQL、Oracle统统不在话下。
安装那些事
装这玩意特别简单,一行命令搞定:
pip install pyodbc
不过啊,还得先装个ODBC驱动,不然这库就没法正常工作了。就像开车得先有驾照一样,装驱动这事得根据你用的数据库来:
# 看看已经装了哪些驱动
import pyodbc
print(pyodbc.drivers())
连接数据库
来看看怎么连上SQL Server:
import pyodbc
# 连接参数
conn_str = (
“Driver={SQL Server};”
“Server=localhost;”
“Database=test_db;”
“Trusted_Connection=yes;” # Windows认证
)
# 建立连接
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()
小贴士:
连接字符串里的参数得根据实际情况改
要是用SQL认证,得加上uid和pwd参数
连接用完记得关闭,不然容易造成资源泄露
查询数据这么玩
查询数据库可太常见了,瞧瞧这代码多优雅:
# 简单查询
cursor.execute(“SELECT * FROM users”)
rows = cursor.fetchall()
# 带参数查询,防SQL注入
age = 25
cursor.execute(“SELECT * FROM users WHERE age > ?”, age)
# 一条一条取数据
while True:
row = cursor.fetchone()
if not row:
break
print(row)
增删改操作
数据库离不开增删改,做起来也贼简单:
# 插入数据
cursor.execute(
“INSERT INTO users (name, age) VALUES (?, ?)”,
(“小猫”, 3)
)
# 更新数据
cursor.execute(
“UPDATE users SET age = ?WHERE name = ?”,
(4, “小猫”)
)
# 删除数据
cursor.execute(
“DELETE FROM users WHERE name = ?”,
(“小猫”,)
)
# 别忘了提交事务
conn.commit()
小贴士:
用参数化查询能防SQL注入,别直接拼SQL语句
改完数据记得commit,不然白改
要是出错了可以rollback回滚
事务处理
要是操作特别多,用事务包起来更稳:
try:
cursor.execute(“INSERT INTO users (name) VALUES (?)”, “张三”)
cursor.execute(“UPDATE accounts SET balance = balance - 100”)
conn.commit()
except:
conn.rollback()
print(“完蛋,出错了”)
finally:
conn.close()
性能优化小技巧
批量插入用executemany,比一条条插快多了:
data = [(“张三”, 20), (“李四”, 22), (“王五”, 25)]
cursor.executemany(
“INSERT INTO users (name, age) VALUES (?, ?)”,
data
)
大数据量查询,用fetchone一条条处理,别一次性fetchall:
cursor.execute(“SELECT * FROM big_table”)
while True:
row = cursor.fetchone()
if not row:
break
process_row(row) # 处理每行数据
小贴士:
查询记得加索引,不然慢死了
记得及时关闭cursor和connection
大事务要拆小,不然锁太久
pyodbc这玩意是真好用,又稳又快,基本上市面上主流数据库都能连。不过用之前得想清楚是不是真需要直接操作数据库,有时候用个ORM可能更合适。看场景选工具,这才是技术人的水平。
推 荐 阅 读
领取专属 10元无门槛券
私享最新 技术干货