- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 python 新手(我相信你可以从我的代码中看出)并且基本上编写了一个示例脚本来测试一些核心命令,以便我可以更好地理解事情是如何工作的。除了最后一个“插入”命令之外,我已经让所有内容都按设计运行——经过几个小时的谷歌搜索和实验,我无法弄清楚出了什么问题,所以如果有人能告诉我需要更改什么并帮助我理解原因(我确信这是基本的,但我很困惑!)。
下面是给我带来麻烦的行:
c.execute("INSERT OR IGNORE INTO {tn} ({cn1}, {cn2}, {cn3}, {cn4}) VALUES ({VID}, {VSnu}, {VIN}, {VName})".\
format(tn=table_name, cn1=column1, cn2=column2, cn3=column3, cn4=column4, VID=ID, VSnu=Snu, VIN=IN, VName=Name))
这是上下文的完整脚本,如果有帮助的话:
import sqlite3
sqlite_file = '/test_database.sqlite' # name of the sqlite database file
table_name = 'test_table'
column1 = 'my_1st_column'
column2 = 'my_2nd_column'
column3 = 'my_3rd_column'
column4 = 'my_4th_column'
ID = int(123456)
Base = 'Arnold'
Snu = 'test'
conn = sqlite3.connect(sqlite_file)
c = conn.cursor()
c.execute("UPDATE {tn} SET {cn2}=('Snu'), {cn3}=('Muh'), {cn4}=('Arnold_A') WHERE {cn1}=({NID})".\
format(tn=table_name, cn1=column1, cn2=column2, cn3=column3, cn4=column4, NID=ID))
i = 1
while(i<15):
if i == 1: IN = 'B'
if i == 2: IN = 'C'
if i == 3: IN = 'D'
if i == 4: IN = 'E'
if i == 5: IN = 'F'
if i == 6: IN = 'G'
if i == 7: IN = 'H'
if i == 8: IN = 'I'
if i == 9: IN = 'J'
ID = ID+1
i = i+1
Name = Base + '_' + IN
params = (Snu, IN, Name)
c.execute("INSERT OR IGNORE INTO {tn} ({cn1}, {cn2}, {cn3}, {cn4}) VALUES ({VID}, {VSnu}, {VIN}, {VName})".\
format(tn=table_name, cn1=column1, cn2=column2, cn3=column3, cn4=column4, VID=ID, VSnu=Snu, VIN=IN, VName=Name))
if(i == 10): break
conn.commit()
conn.close()
如果孤立的话,它会很好地写入“VID”项(这是一个整数列和表的主键),但之后的所有内容都会解释为一列,我得到“没有这样的列:[值” ]”错误。
无论“VID”后面出现什么,我都会收到此错误 - 无论是任何变量(如上面的命令所示),还是尝试插入直接字符串值。如果有帮助的话,这些其他列只是文本列。
最佳答案
我知道你只是在学习,所以不要被我接下来要说的话吓到:-)
您的 SQL 命令格式不正确。许多数据库 API 中都存在一个称为参数替换的特殊功能,包括 Python 中的 SQLite。
您不想像现在这样连接值,因为这为所谓的 SQL 注入(inject)开辟了空间。在像您这样的简单场景中,这可能不是问题,但是当人们在互联网上公开的服务中执行此操作时,可能会造成巨大的损害(数据盗窃、数据丢失、数据损坏等)。这张漫画说明了这个问题:https://xkcd.com/327/
就您的情况而言,使用参数替换编写 SQL 命令不仅会使您的代码更安全、更易于阅读,而且还可以解决您遇到的问题。
请参阅下面的示例:
import sqlite3
conn = sqlite3.connect(":memory:")
c = conn.cursor()
# Here we don't need parameter substitution
c.execute("CREATE TABLE mytable (name text, quantity int)")
# We set the values somewhere else. For example, this could come from a web
# form
entry = ("myname", 2)
# Now we execute the query, with the proper parameter substitution.
# Note the `?` characters. Python will automatically replace those with the
# values in `entry`, making sure that things are right when forming the
# command before passing to SQLite.
c.execute("INSERT OR IGNORE INTO mytable VALUES (?, ?)", entry)
print(c.execute("SELECT * from mytable").fetchall())
上面的示例假设您不需要参数化列名称。在您的情况下,您显然正在读取所有列,因此您实际上不需要传递所有名称,只需像我在上面的示例中所做的那样,它就会读取所有列。如果您确实需要将列名作为参数来读取数据子集,那么您将不得不诉诸与您所使用的类似的串联机制。但在这种情况下,一如既往,请务必小心用户输入,以确保它不会形成错误的查询和命令。
关于python - 获取 "sqlite3.OperationalError: no such column:",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55778182/
我有一个 Pandas 数据框,如下所示。 activity User_Id \ 0 VIEWED MOVIE 158d292ec18a49 1 VIEWED
我正在尝试在运行 12.04 的 Ubuntu 机器上使用 mysql 创建一个远程数据库。 它有一个启用了远程登录的根用户。我已经启动了服务器。 输出 sudo netstat -tap | gre
这个问题在这里已经有了答案: sqlalchemy.exc.OperationalError: (OperationalError) unable to open database file Non
我正在尝试使用 SQLAlchemy(使用 Flask)创建模型,但我无法在互联网上的任何地方找到解决我的问题的方法。 它给我的错误是 sqlalchemy.exc.OperationalError:
我收到以下错误: sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: s_amodel [SQL: '
我搜索了很多这个错误,但我只找到了一些背后有更多信息的信息,比如“FATAL: ...”。我的没有。它只是说 sqlalchemy.exc.OperationalError: (psycopg2.Op
我在使用 flask_alchemy 进行单元测试时遇到问题 生产环境我用的是postgresql数据库 "SQLALCHEMY_DATABASE_URI": "postgresql://login:
运行.py文件: from flaskblog import app, db if __name__ == '__main__': db.create_all() app.run(de
我已在本地成功运行我的 Flask 应用程序,但是当我将其部署到我的产品环境时,出现此错误: [2019-08-26 00:15:36,229] ERROR in app: Exception on
服务 我的服务基于flask + postgresql + gunicorn + supervisor + nginx docker部署的时候,运行服务后,再访问api,有时候会报错,有时候还可以。
我定义了表名 users_table 并运行 db.create_all() 来创建表,但是在提交更新用户信息时出现错误“no such table user_table”。 我如何测试: (unde
我目前正在第一次编写一些 Airflow DAG 完整性测试。我遇到了一个错误,我的一些运算符(operator)/任务引用了 Airflow 变量,例如: test_var= Variable.ge
我正在尝试通过 flask 中的 sqlalchemy 执行原始 sql 查询。在 psql 中运行时,原始 sql 查询会给出正确的输出。 postgres=# SELECT distin
import requests import time import csv import ast import sys import mysql.connector config = { 'user
我用了很长时间的Postgres 14和PGAdmin4 6.7,一切都很好。这是在Windows11上。昨天我试着升级到Postgres 15和PGAdmin4 7.6,但这就是它失败的地方!。Po
错误: sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) FATAL: password authentication fai
我正在使用 Python、Flask 和 SQLAlchemy。我在构建应用程序时一直使用本地数据库,并且它在以下代码中运行良好: from flask import Flask from flask
我正在尝试使用 mysql 来运行 python-flask Web 应用程序。但是,我在主应用程序文件中连接到数据库,每次尝试将数据输入数据库(即注册客户)时,我都会收到错误消息: Tracebac
我想从当前数据库切换到另一个 MySQL 数据库(从后台)。所以,我想这与我设置数据库设置的方式有关。 engine = create_engine('mysql+mysqldb://user:pw@
我在 Google AppEngine 上使用带有 Flask 的应用程序,我使用此常量 SQLALCHEMY_DATABASE_URI = 'mysql://user:pass@ip_address
我是一名优秀的程序员,十分优秀!