python - 如何将 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,))
解决方案
推荐阅读
- python - 分组和聚合列,但如果值不匹配则创建 NaN
- qt - 当为常规样式图标定义 FontLoader 时,不要使用 Font Awesome 中的纯色样式图标
- sql - SSIS 包加载到 Excel 文件中
- laravel - Laravel 嵌套路由路径
- java - 如何将椭圆移动到 mouseClick 的坐标?
- python - Paraminko 连接在 Lambda 中失败
- ios - 调用 record() 时 AVAudioRecorder 长时间延迟
- azure - 将容器名称作为参数传递给 BlobTrigger
- c# - 将数据注入每个请求
- apache-spark - Spark 结构化流不会从先前的偏移量重新开始