嗨..我试图在我的表中搜索一个包含文本和整数值的条目..我的代码在sqlite3数据库上运行良好...但在Postgresql数据库上抛出数据错误..
import psycopg2
class database:
def __init__(self):
self.con=psycopg2.connect("dbname='book_store' user='postgres' password='5283' host='localhost' port='5432' ")
self.cur=self.con.cursor()
self.cur.execute("CREATE TABLE if not exists books(id SERIAL PRIMARY KEY,title TEXT NOT NULL UNIQUE,author TEXT NOT NULL,year integer NOT NULL,isbn integer NOT NULL UNIQUE)")
self.con.commit()
def insert(self,title,author,year,isbn):
try:
self.cur.execute("INSERT INTO books(title,author,year,isbn) VALUES(%s,%s,%s,%s)",(title,author,year,isbn))
self.con.commit()
except:
#print("already exists..")
pass
def view(self):
self.cur.execute("SELECT * FROM books")
rows=self.cur.fetchall()
print(rows)
def search(self,title="",author="",year="",isbn=""):
self.cur.execute("SELECT * FROM books WHERE title=%s or author=%s or year=%s or isbn=%s",(title,author,year,isbn))
row=self.cur.ferchall()
print(row)
db=database()
#db.insert("The Naughty","AparnaKumar",1995,234567654)
db.view()
db.search(year=1995)
答案 0 :(得分:1)
这就是你想要的:
def search(self, title=None, author=None, year=None, isbn=None):
self.cursor.execute("""
select *
from books
where
(title = %(title)s or %(title)s is null)
and
(author = %(author)s or %(author)s is null)
and
(year = %(year)s or %(year)s is null)
and
(isbn = %(isbn)s or %(isbn)s is null)
""",
{'title': title, 'author': author, 'year': year, 'isbn': isbn}
)