Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Python测试为MySQL错误_Python - Fatal编程技术网

将Python测试为MySQL错误

将Python测试为MySQL错误,python,Python,我创建了一个小脚本,可以将数据保存到MySQLdb。起初,当我使用时,它工作正常: cursor.execute('INSERT INTO people (name, text) VALUES ("dan", "test2")') 上面将“dan”保存到标题中,“test2”保存到文本中。我想测试一下,看看我是否能够定义一些东西,并以这种方式填充它。例如,如果我要抓取一个站点并说(dan=soup.title.string)或类似的话,它将能够将这些数据填充到数据库中。我试着四处看看,但似乎什

我创建了一个小脚本,可以将数据保存到MySQLdb。起初,当我使用时,它工作正常:

cursor.execute('INSERT INTO people (name, text) VALUES ("dan", "test2")')
上面将“dan”保存到标题中,“test2”保存到文本中。我想测试一下,看看我是否能够定义一些东西,并以这种方式填充它。例如,如果我要抓取一个站点并说(
dan=soup.title.string
)或类似的话,它将能够将这些数据填充到数据库中。我试着四处看看,但似乎什么也找不到

import MySQLdb
import sys

try:
    db = MySQLdb.connect(
        host = 'localhost',
        user = 'root',
        passwd = '',
        db = 'python',
        )
except:
    print "db not found"

dan = "dandandan"
test2 = "testing101"

cursor = db.cursor()
cursor.execute('INSERT INTO people (name, text) VALUES (dan, test2)')
cursor.execute('SELECT * FROM people')
result = cursor.fetchall()
db.commit()
db.close()
我收到的错误是:

C:\Users\********\Desktop>python mysqltest.py
Traceback (most recent call last):
  File "mysqltest.py", line 18, in <module>
    cursor.execute('INSERT INTO people (name) VALUES (dan)')
  File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 174, in execute
    self.errorhandler(self, exc, value)
  File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 36, in defau
lterrorhandler
    raise errorclass, errorvalue
_mysql_exceptions.OperationalError: (1054, "Champ 'dan' inconnu dans field list"
)
C:\Users\*********\Desktop>python mysqltest.py
回溯(最近一次呼叫最后一次):
文件“mysqltest.py”,第18行,在
cursor.execute('INSERT-INTO-people(name)VALUES(dan)'))
文件“C:\Python27\lib\site packages\MySQLdb\cursors.py”,第174行,在execute中
errorhandler(self、exc、value)
文件“C:\Python27\lib\site packages\MySQLdb\connections.py”,第36行,德福格式
过滤处理程序
提高errorclass,errorvalue
_mysql_exceptions.OperationalError:(1054,“Champ'dan'inconu dans字段列表”
)

您需要使用参数

cursor.execute('INSERT INTO people (name, text) VALUES (%s,%s)', (dan, test2))

您需要使用参数

cursor.execute('INSERT INTO people (name, text) VALUES (%s,%s)', (dan, test2))

使用事先准备好的陈述:

cursor.execute("INSERT INTO people (name, text) VALUES (%s,%s)", (dan, test2))
从:

paramstyle

说明参数标记格式类型的字符串常量 接口所期望的。设置为“格式”=ANSI C printf格式 代码,例如“…其中名称=%s”。如果映射对象用于 conn.execute(),则接口实际使用'pyformat'=Python 扩展格式代码,例如“…其中名称=%(名称)s”。然而,API 目前不允许在中指定多个样式 帕拉姆风格

请注意,查询字符串中的任何文字百分比符号都传递给 execute()必须转义,即%%

参数占位符只能用于插入列值。他们 不能用于SQL的其他部分,例如表名, 声明等


使用事先准备好的陈述:

cursor.execute("INSERT INTO people (name, text) VALUES (%s,%s)", (dan, test2))
从:

paramstyle

说明参数标记格式类型的字符串常量 接口所期望的。设置为“格式”=ANSI C printf格式 代码,例如“…其中名称=%s”。如果映射对象用于 conn.execute(),则接口实际使用'pyformat'=Python 扩展格式代码,例如“…其中名称=%(名称)s”。然而,API 目前不允许在中指定多个样式 帕拉姆风格

请注意,查询字符串中的任何文字百分比符号都传递给 execute()必须转义,即%%

参数占位符只能用于插入列值。他们 不能用于SQL的其他部分,例如表名, 声明等


谢谢你的建议,巴德,如果这个问题给人的印象是新手只是想确保我理解正确。如果我要使用三个而不是两个,那么行应该是:cursor.execute('INSERT-INTO-people(name,text)value(%s,%s,%s);(dan,test2,test3))@BubblewrapBeast是的,您可以添加其他参数,样式不变。显然,参数的顺序与命令的执行有关。太棒了!再次感谢老兄。谢谢你的回答,巴德,如果这个问题被认为是新手的话,我很抱歉,我只是想确保我理解正确。如果我要使用三个而不是两个,那么行应该是:cursor.execute('INSERT-INTO-people(name,text)value(%s,%s,%s);(dan,test2,test3))@BubblewrapBeast是的,您可以添加其他参数,样式不变。显然,参数的顺序与命令的执行有关。太棒了!再次感谢你,伙计。