本文将带您了解关于如何使用WHERE在python中更新sqlite3记录?的新内容,另外,我们还将为您提供关于android–数据被添加到列表中而不是在addChildEventListener的o
本文将带您了解关于如何使用 WHERE 在 python 中更新 sqlite3 记录?的新内容,另外,我们还将为您提供关于android – 数据被添加到列表中而不是在addChildEventListener的onChildChanged()中更新、go-sqlite3 操作加密的 sqlite3 数据库不加密、mysql - SQLite3 php excel caching method sqlite3 is not availableEOL、Python 中的参数错误,SQLite3 类型错误:+ 不支持的操作数类型:'sqlite3.Cursor' 和 'str'的实用信息。
本文目录一览:- 如何使用 WHERE 在 python 中更新 sqlite3 记录?
- android – 数据被添加到列表中而不是在addChildEventListener的onChildChanged()中更新
- go-sqlite3 操作加密的 sqlite3 数据库不加密
- mysql - SQLite3 php excel caching method sqlite3 is not availableEOL
- Python 中的参数错误,SQLite3 类型错误:+ 不支持的操作数类型:'sqlite3.Cursor' 和 'str'
如何使用 WHERE 在 python 中更新 sqlite3 记录?
如何解决如何使用 WHERE 在 python 中更新 sqlite3 记录?
我正在努力用 python 更新我的 sqlite3 数据库中的记录。 我已尝试遵循此 tutorial 并根据我的需要修改教程中的此函数:
def update_task(conn,task):
"""
update priority,begin_date,and end date of a task
:param conn:
:param task:
:return: project id
"""
sql = '''''' UPDATE tasks
SET priority = ?,begin_date = ?,end_date = ?
WHERE id = ?''''''
cur = conn.cursor()
cur.execute(sql,task)
conn.commit()
我的桌子是这样设置的:
sql_create_answers_table = """CREATE TABLE IF NOT EXISTS answers (
id integer PRIMARY KEY,predmet text NOT NULL UNIQUE,tag text NOT NULL,keyword text NOT NULL,obsah text NOT NULL,autor text NOT NULL,datum text NOT NULL
);"""
db.create_table(sql_create_answers_table)
我的更新函数是这样写的:
def update_answer(answer):
try:
conn = create_connection(db_name)
cur = conn.cursor()
sql_command = """UPDATE answers
SET predmet = ?,tag = ?,keyword = ?,obsah = ?,autor = ?,datum = ?,WHERE id = ?"""
# I have also tried this: cur.execute(sql_command,answer )
cur.execute(sql_command,(answer[1],answer[2],answer[3],answer[4],answer[5],answer[6],answer[0]) )
conn.commit()
conn.close()
finally:
unlock_db()
这是我建立到数据库的连接的方式:
def create_connection(db_file):
""" create a database connection to an sqlite database """
conn = None
try:
conn = sqlite3.connect(db_file)
return conn
except Error as e:
print(e)
当我在 tkinter 应用程序中调用该函数时,原始答案如下所示:
(1,''pokus'',''žádný'',''datum'',''Text zpravy a ahoj kamo.\\n'',''Vlad'',''02/09/21'')
然后我创建一个新版本的答案,如下所示:
new_answer = (1,''Text\\n'',''02/15/21'') # the 4th field changes
然后调用更新函数(db是我导入的带有该函数的模块):
db.update_answer(new_answer)
我收到一个错误“
File "f:\\AAA Vlada\\a škola\\Python\\zapoctak\\db_module.py",line 135,in update_answer
cur.execute(sql_command,answer[0]) )
sqlite3.OperationalError: near "WHERE": Syntax error
”
我的数据库上的其他操作正常工作,我不明白为什么这个简单的更新功能不起作用。 “更新的答案”在我看来是正确的,更新功能也是如此。
我很感激任何帮助,如果需要,我可以提供更多代码。
解决方法
去掉 ,
子句前多余的 WHERE
字符,你应该没问题。
android – 数据被添加到列表中而不是在addChildEventListener的onChildChanged()中更新
我在firebase中有一些数据在某些特定操作上被更改,我希望在应用程序中显示该更改.
我有一个RecyclerView,其中来自firebase的所有数据都已填充.
这是代码:
databaseReference.child("uListings").child(Accesstoken.getCurrentAccesstoken().getUserId()).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
// recyclerview gets populated here
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot.getValue() != null) {
Map<String,String> map = (Map<String,String>)dataSnapshot.getValue();
Map<ArrayList<String>,ArrayList<String>> map2 = (Map<ArrayList<String>,ArrayList<String>>)dataSnapshot.getValue();
String pDescription = map.get("pDescription");
String pDuration = map.get("pDuration");
String pPrice = map.get("pPrice");
String postedAt = map.get("postedAt");
String views = map.get("views");
ArrayList<String> imageUrl = map2.get("imageUrl");
if (imageUrl != null) {
UHandler pHandler = new UHandler(imageUrl.get(0), pDescription, pDuration, pPrice, postedAt, views);
list.add(pHandler);
adapter.notifyDataSetChanged();
progressBar.setVisibility(View.INVISIBLE);
} else {
Toast.makeText(getBaseContext(), "imageUrlNone", Toast.LENGTH_SHORT).show();
}
} else {
Log.d("PDPchange", "NULL");
progressBar.setVisibility(View.INVISIBLE);
}
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
这是UHandlerAdapter.java:
public class UHandlerAdapter extends RecyclerView.Adapter<UHandlerAdapter.MyViewHolder> {
private Context mContext;
private List<UHandler> listingList;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView pDescription, pDuration, pPrice, postedAt, listingViews, imageUrl;
public ArrayList<String> imageUrls;
public CircleImageView pImage;
public MyViewHolder(View view) {
super(view);
pImage = (CircleImageView) view.findViewById(R.id.p_image_profile);
pDescription = (TextView) view.findViewById(R.id.p_description_profile);
pDuration = (TextView) view.findViewById(R.id.p_duration_profile);
pPrice = (TextView) view.findViewById(R.id.p_price_profile);
postedAt = (TextView) view.findViewById(R.id.p_posted_when_profile);
listingViews = (TextView) view.findViewById(R.id.listing_views_profile);
imageUrl = (TextView) view.findViewById(R.id.image_urls_profile);
}
}
public UHandlerAdapter(Context mContext, List<UProfileHandler> listingList) {
this.mContext = mContext;
this.listingList = listingList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.profile_all, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
UHandler handler = listingList.get(position);
holder.pDescription.setText(handler.getPDescriptionProfile());
holder.pDuration.setText(handler.getPDurationProfile());
holder.pPrice.setText(handler.getPPriceProfile());
holder.postedAt.setText(handler.getPostedAt());
holder.listingViews.setText(handler.getListingViews());
// loading album cover using Glide library
Glide.with(mContext)
.load(handler.getPImageProfile())
.apply(new RequestOptions().placeholder(R.drawable.ic_placeholder).error(R.drawable.ic_error))
.into(holder.pImage);
}
@Override
public int getItemCount() {
return listingList.size();
}
}
问题是在onChildChanged()中,更改的视图会在列表中添加一个完整的其他项,以反映其更改的值,而不仅仅是在onChildAdded()中先前添加的项中更新.
我怎样才能在以前添加的项目中更新它?
解决方法:
您可以存储密钥以便更新它,例如:
ArrayList<String> mKeys = new ArrayList<String>();
databaseReference.child("uListings").child(Accesstoken.getCurrentAccesstoken().getUserId()).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
// recyclerview gets populated here
String key = dataSnapshot.getKey();
mKeys.add(key);
adapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot.getValue() != null) {
.......
//Now we get the index to update specific value
String key = dataSnapshot.getKey();
int index = mKeys.indexOf(key);
list.set(index, pHandler);
adapter.notifyDataSetChanged();
....
}
go-sqlite3 操作加密的 sqlite3 数据库不加密
代码如下:建立的数据库并不加密,求解。
// +build sqlite_userauth
package main
import (
"database/sql"
"fmt"
"strconv"
"time"
_ "github.com/mattn/go-sqlite3"
)
func main() {
now_time := time.Now()
//db, err := sql.Open("sqlite3", "./foo1.db")
hs := now_time.Format("150405")
tmp_str := "file:test" + hs + ".s3db?_auth&_auth_user=admin&_auth_pass=admin&_auth_crypt=sha1"
db, err := sql.Open("sqlite3", tmp_str)
checkErr(err)
//查询是否存在数据表
check_db, err := db.Query("SELECT name FROM sqlite_master WHERE type=''table'' ORDER BY name")
checkErr(err)
have_table := 0
for check_db.Next() {
var tablename string
err = check_db.Scan(&tablename)
checkErr(err)
fmt.Println("****查询表:")
fmt.Println(tablename)
if tablename == "userinfo" {
have_table = 1
}
}
if have_table == 0 {
// 创建数据表
create_db, err := db.Prepare("CREATE TABLE [userinfo]([uid] INTEGER PRIMARY KEY, [username] TEXT, [departname] TEXT, [created] TEXT);")
checkErr(err)
_, err = create_db.Exec()
}
//插入数据
stmt, err := db.Prepare("INSERT INTO userinfo(username, departname, created) values(?,?,?)")
checkErr(err)
nt := now_time.Format("2006-01-02 15:04:05")
res, err := stmt.Exec("astaxie", "研发部门", nt)
checkErr(err)
id, err := res.LastInsertId()
checkErr(err)
fmt.Println("****最新ID:")
fmt.Println(id)
//更新数据
stmt, err = db.Prepare("update userinfo set username=? where uid=?")
checkErr(err)
res, err = stmt.Exec("astaxieupdate", id)
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println("****更新ID:")
fmt.Println(affect)
//查询数据
rows, err := db.Query("SELECT * FROM userinfo")
checkErr(err)
for rows.Next() {
var uid int
var username string
var department string
var created string
err = rows.Scan(&uid, &username, &department, &created)
checkErr(err)
fmt.Println("****查询数据:")
fmt.Println("uid:" + strconv.Itoa(uid))
fmt.Println("username:" + username)
fmt.Println("department:" + department)
fmt.Println("created:" + created)
}
//删除数据
// stmt, err = db.Prepare("delete from userinfo where uid=?")
// checkErr(err)
// res, err = stmt.Exec(id)
// checkErr(err)
// affect, err = res.RowsAffected()
// checkErr(err)
// fmt.Println("****删除数据:")
// fmt.Println(affect)
db.Close()
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
mysql - SQLite3 php excel caching method sqlite3 is not availableEOL
有人遇到过这种错误提示么,导入文件的时候报的错误
回复内容:
有人遇到过这种错误提示么,导入文件的时候报的错误
Python 中的参数错误,SQLite3 类型错误:+ 不支持的操作数类型:'sqlite3.Cursor' 和 'str'
如何解决Python 中的参数错误,SQLite3 类型错误:+ 不支持的操作数类型:''sqlite3.Cursor'' 和 ''str''
我是编码和这个新社区的初学者。我需要您的帮助才能理解为什么无法获得此解决方案。我想从一个条目中获取一个数字,然后与同一项目的最后一条记录相加,以便我可以将其汇总。
这是我的代码:
def add_stock(self):
time = datetime.Now().strftime("%B %d,%Y")
hour = datetime.Now().strftime("%I:%M%p")
query = ''SELECT totalstock FROM stocks WHERE name = ? AND MovementID = ( SELECT max( MovementID ) FROM stocks)''
parameters = (self.name.get(),)
lastrecord = self.run_query(query,parameters)
total = lastrecord + self.quantity.get()
if self.validation():
query = ''INSERT INTO stocks VALUES(NULL,?,?)''
parameters = (self.name.get(),self.quantity.get(),total,time,hour)
self.run_query(query,parameters)
self.message[''text''] = ''Movement {} added succesfully''.format(self.name.get())
self.name.delete(0,END)
self.quantity.delete(0,END)
else:
self.message[''text''] = ''Name and Quantity required''
self.get_product()
但是有问题,有人可以帮我吗?
这是完整的代码:
from tkinter import *
from tkinter import ttk
from datetime import datetime
import sqlite3
class Main:
db_name = ''materiales.db''
def __init__(self,window):
self.wind = window
self.wind.title(''Stock App'')
#create frame
frame = LabelFrame(self.wind,text = ''Add stock'')
frame.grid(row = 0,column = 0,columnspan = 3,pady = 20)
# Name Input
Label(frame,text = ''Name: '').grid(row = 1,column = 0)
self.name = Entry(frame)
self.name.focus()
self.name.grid(row = 1,column = 1)
# Quantity Input
Label(frame,text = ''Quantity: '').grid(row = 2,column = 0)
self.quantity = Entry(frame)
self.quantity.grid(row = 2,column = 1)
# Button Add Stock
ttk.Button(frame,text = ''Add Stock'',command = self.add_stock).grid(row = 3,columnspan = 2,sticky = W + E)
#Log Message
self.message = Label(text = '''',fg = ''red'')
self.message.grid(row = 3,sticky = W + E)
# Table
self.tree = ttk.Treeview(height = 10,columns = 2)
self.tree.grid(row = 4,columnspan = 2)
self.tree.heading(''#0'',text = ''Name'',anchor = CENTER)
self.tree.heading(''#1'',text = ''Stock'',anchor = CENTER)
#Buttons
ttk.Button(text = ''DELETE'',command = self.delete_product).grid(row = 5,sticky = W + E)
ttk.Button(text = ''MODIFY'',command = self.modify_product).grid(row = 5,column = 1,sticky = W + E)
self.get_product()
def run_query(self,query,parameters = ()):
with sqlite3.connect(self.db_name) as conn:
cursor = conn.cursor()
result = cursor.execute(query,parameters)
conn.commit()
return result
def get_product(self):
records = self.tree.get_children()
for element in records:
self.tree.delete(element)
query = ''SELECT * FROM product ORDER BY name DESC''
db_rows = self.run_query(query)
for row in db_rows:
self.tree.insert('''',text = row[1],values = row[2])
def validation(self):
return len(self.name.get()) != 0 and len(self.quantity.get()) !=0
def add_stock(self):
time = datetime.Now().strftime("%B %d,%Y")
hour = datetime.Now().strftime("%I:%M%p")
query = ''SELECT totalstock FROM stocks WHERE name = ? AND MovementID = ( SELECT max( MovementID ) FROM stocks)''
parameters = (self.name.get(),)
lastrecord = self.run_query(query,parameters)
total = lastrecord + self.quantity.get()
if self.validation():
query = ''INSERT INTO stocks VALUES(NULL,?)''
parameters = (self.name.get(),hour)
self.run_query(query,parameters)
self.message[''text''] = ''Movement {} added succesfully''.format(self.name.get())
self.name.delete(0,END)
self.quantity.delete(0,END)
else:
self.message[''text''] = ''Name and Quantity required''
self.get_product()
def delete_product(self):
try:
self.tree.item(self.tree.selection())[''text''][0]
except IndexError as e:
self.message[''text''] = ''Please Select a Record''
return
name = self.tree.item(self.tree.selection())[''text'']
query = ''DELETE FROM product WHERE name = ?''
self.run_query(query,(name,))
self.message[''text''] = ''Product {} deleted succesfully''.format(name)
self.get_product()
def modify_product(self):
try:
self.tree.item(self.tree.selection())[''text''][0]
except IndexError as e:
self.message[''text''] = ''Please Select a Record''
return
name = self.tree.item(self.tree.selection())[''text'']
old_price = self.tree.item(self.tree.selection())[''values''][0]
self.edit_wind = Toplevel()
self.edit_wind.title = ''Edit Product''
#Old Name
Label(self.edit_wind,text = ''Old Name: '').grid(row = 0,column = 1)
Entry(self.edit_wind,textvariable = StringVar(self.edit_wind,value = name),state = ''readonly'').grid(row = 0,column = 2)
#New Name
Label(self.edit_wind,text = ''New Name: '').grid(row = 1,column = 1)
new_name = Entry(self.edit_wind)
new_name.grid(row = 1,column = 2)
#Old Price
Label(self.edit_wind,text = ''Old Price: '').grid(row = 2,value = old_price),state = ''readonly'').grid(row = 2,column = 2)
#New Price
Label(self.edit_wind,text = ''New Price: '').grid(row = 3,column = 1)
new_price = Entry(self.edit_wind)
new_price.grid(row = 3,column = 2)
Button(self.edit_wind,text = ''Update'',command = lambda: self.edit_records(new_name.get(),name,new_price.get(),old_price)).grid(row = 4,column = 2,sticky = W)
def edit_records(self,new_name,new_price,old_price):
query = ''UPDATE product SET name = ?,precio = ? WHERE name = ? AND precio = ?''
parameters = (new_name,old_price)
self.run_query(query,parameters)
self.edit_wind.destroy()
self.message[''text''] = ''Record {} updated successfully''.format(name)
self.get_product()
if __name__ == ''__main__'':
window = Tk()
application = Main(window)
window.mainloop()
提前致谢并致以亲切的问候。
解决方法
在代码的第 72 行引发异常。该代码尝试将字符串对象添加到 sqlite.Cursor
对象,但由于这些类型与该操作不兼容,因此失败。
相反,您需要提取返回的 Cursor
对象中保存的数据,可以这样做:
total = lastrecord.fetchone()[0]
fetchone()
返回元组类型数据的第一行。元组中的第一项是查询值,在本例中假定为整数。您无法添加由 self.quantity.get()
返回的字符串,因此您需要将其转换为整数(假设它是一个整数......它可能是另一种数字类型)来计算新的总数:
total += int(self.quantity.get())
关于如何使用 WHERE 在 python 中更新 sqlite3 记录?的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于android – 数据被添加到列表中而不是在addChildEventListener的onChildChanged()中更新、go-sqlite3 操作加密的 sqlite3 数据库不加密、mysql - SQLite3 php excel caching method sqlite3 is not availableEOL、Python 中的参数错误,SQLite3 类型错误:+ 不支持的操作数类型:'sqlite3.Cursor' 和 'str'等相关知识的信息别忘了在本站进行查找喔。
本文标签: