我正在开发一个工具,该工具允许Python开发人员编写pythonic代码以与sqlite3数据库进行交互,类似于sqlalchemy,但没有“翻译”阶段。如果我可以生成sqlite3准备好的语句,该如何直接将其传递给评估系统?
作为一个粗略的例子,这是我粗略地查看用户能够与我的工具进行交互的方式:
<?php
session_start();
if (isset($_SESSION['userid'])) {
$money = json_decode(file_get_contents('php://input'), true);
$money_as_number = intval( $money );
$userid = $_SESSION['userid'];
try {
$db = DB();
$stmt = $db->prepare("UPDATE usersystem SET money=:money WHERE userid=:userid");
$stmt->bindValue(':money', $money_as_number, PDO::PARAM_INT);
$stmt->bindValue(':userid', $userid, PDO::PARAM_STR);
$stmt->execute();
}
catch(PDOException $e)
{
$db = null;
echo $e->getMessage();
}
}
?>
答案 0 :(得分:0)
SQLite3中没有(公共)API,允许您执行预构建的SQLite字节码。可以使用EXPLAIN
SQL命令查看SQL语句的字节码,但这是出于调试和学习目的,而不是您要尝试执行的操作。
对于大多数目的,您不需要此。如果您认为花费大量时间来编写准备好的语句,可以在创建它的sqlite3_stmt
数据库连接的整个生命周期内存储sqlite3
个对象。已执行的准备好的语句可以为reset,从而可以再次执行它们。因此,只要存在数据库连接,您就可以编译该语句一次,并根据需要使用它多次。
但是就是这样。没有机制可以在sqlite3
连接的生命周期之外保留准备好的语句。您不能通过任何公共API提取字节码,也不能使用获得的某些字节码来重新构成准备好的语句。
如果要在连接之外进行持久化,则需要将SQL语句 text 存储在要持久化的任何位置,然后在重新连接到数据库时简单地重新编译准备好的语句。取决于应用程序的寿命,一次重新编译(或多次重新编译取决于存储的数量)不是特别的负担。