首页 > 解决方案 > 如何将 SQL 命令语句作为参数传递给另一个函数

问题描述

我正在构建一个数据库应用程序作为练习。我想使用一组函数通过构造 SQL 命令来提供创建、更新、添加和删除功能,这些命令将传递给连接器函数,该函数将处理数据库连接、执行、提交和关闭。

我曾尝试使用“SQL 命令 %s”,(某些东西)也尝试了上述方法,但使用 ? 而不是 %s 这似乎是正确的语法,但通常直接包含在执行函数中

import sqlite3

class Connector:

    def __init__(self,name):
        self.db_name = name
        self.table = "book"

    def change_table(self,table):
        self.table = table

    def create_db(self): 
        command = "CREATE TABLE IF NOT EXISTS book (id INTEGER PRIMARY KEY, title TEXT, author TEXT, year INTEGER, isbn INTEGER)"
        return self.generic_connector(command)

    def insert(self,title,author,year,isbn):
        try:
            title = str(title)
            author = str(author)            
            isbn = int(isbn)
            year = int(year)
            command = "INSERT INTO book VALUES(:title,:author,:year,:isbn)", 
            {"title": title,"author": author,"year": year,"isbn":isbn} 
            print(command)
            return self.generic_connector(command)
        except ValueError:
            return 1

    def generic_connector(self,command):
        command = command[0], command[1]
        print(command)
        try:
            conn = sqlite3.connect(self.db_name)
            cur = conn.cursor()
            cur.execute(command)
            rows = cur.fetchall()
            conn.commit()
            conn.close()
            return rows
        except (ValueError, SyntaxError):
            print("oops")

当我打印命令时,我希望看到:-

"CREATE TABLE IF NOT EXISTS table_name (id INTEGER PRIMARY KEY, title TEXT, author TEXT, year INTEGER, isbn INTEGER)"

相反,我得到了这个:-

("CREATE TABLE IF NOT EXISTS %s (id INTEGER PRIMARY KEY, title TEXT, author TEXT, year INTEGER, isbn INTEGER)", (self.table,))

标签: pythonsqlite

解决方案


推荐阅读