在Python中使用数据库(主要是MySQL)的标准/推荐方法是什么?
我不想要ORM,越轻越好.我不介意编写我自己的SELECT,但我想要一些映射字典的东西,例如,做INSERT和UPDATE.我主要是一个PHP程序员,我习惯做这样的事情:
$data = array(
'foo' => 'bar'
);
$insert = $db->insert('table', $data);
Run Code Online (Sandbox Code Playgroud)
Python有这样的东西吗?我查看了SQLAlchemy,显然每个人都使用它,它的"SQL表达式"看起来不错,但是使用整个东西基本上编写原始SQL似乎有些过分.
要使用dict进行插入,您正在寻找支持"命名"(占位符)参数样式的数据库驱动程序(在链接中,搜索"paramstyle"):
来自sqlite3文档:
import sqlite3
con = sqlite3.connect("mydb")
cur = con.cursor()
who = "Yeltsin"
age = 72
cur.execute("select name_last, age from people where name_last=:who and age=:age",
{"who": who, "age": age})
print cur.fetchone()
Run Code Online (Sandbox Code Playgroud)
不幸的是,MySQL,两个主要的驱动程序,MySQLdb和oursql不支持"命名"paramstyle.MySQLdb使用"format"参数样式(使用'%s'),而myql使用"qmark"参数样式(使用'?').这两种参数都要求你提供一个list而不是一个dictargs:
x={'bar':1.0,'baz':2.0}
sql='INSERT INTO foo (bar,baz) VALUES (?,?)'
cur.execute(sql,[x['bar'],x['baz']])
Run Code Online (Sandbox Code Playgroud)
顺便说一下,如果你需要一个驱动程序来连接MySQL,请使用oursql.MySQLdb历史上一直是Python-MySQL交互的首选驱动程序,但该驱动程序使用正则表达式将SQL和参数操作为一个带引号的字符串,然后将其发送到MySQL.相比之下,oursql使用预处理语句,分别发送SQL和参数,避免了转义数据的需要.我们的mysql方式是正确的方法,并避免困扰MySQLdb的某些错误.
| 归档时间: |
|
| 查看次数: |
1873 次 |
| 最近记录: |