在没有ORM的情况下使用Python中的数据库

Ric*_*cky 3 python database

在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似乎有些过分.

unu*_*tbu 5

要使用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,两个主要的驱动程序,MySQLdboursql不支持"命名"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的某些错误.


Tho*_*s K 0

据我所知,您需要一个适用于您正在使用的数据库系统的特定模块。SQLite 位于标准库中。对于 mySQL,请尝试mySQLdb。这里有一个教程