gpt4 book ai didi

python - 从 Python 插入 MySQL - 错误

转载 作者:行者123 更新时间:2023-11-29 06:48:35 25 4
gpt4 key购买 nike

我正在尝试将记录写入 MySQL 数据库,其中我已将表 jobs 定义为:

CREATE TABLE jobs(
job_id INT NOT NULL AUTO_INCREMENT,
job_title VARCHAR(300) NOT NULL,
job_url VARCHAR(400) NOT NULL,
job_location VARCHAR(150),
job_salary_low DECIMAL(25) DEFAULT(0),
job_salary_high DECIMAL(25), DEFAULT(0),
company VARCHAR(150),
job_posted DATE,
PRIMARY KEY ( job_id )
);

我正在测试的代码是:

cur.execute("INSERT INTO jobs VALUES(DEFAULT, '"+jobTitle+"','"
+jobHref+"',"+salaryLow+","+salaryHigh+",'"+company+"',"
+jobPostedAdjusted+"','"+salaryCurrency+"';")
print(cur.fetchall())

我得到的错误是:

pydev debugger: starting
Traceback (most recent call last):
File "C:\Users\Me\AppData\Local\Aptana Studio 3\plugins\org.python.pydev_2.7.0.2013032300\pysrc\pydevd.py", line 1397, in <module>
debugger.run(setup['file'], None, None)
File "C:\Users\Me\AppData\Local\Aptana Studio 3\plugins\org.python.pydev_2.7.0.2013032300\pysrc\pydevd.py", line 1090, in run
pydev_imports.execfile(file, globals, locals) #execute the script
File "C:\Users\Me\Documents\Aptana Studio 3 Workspace\PythonScripts\PythonScripts\testFind.py", line 25, in <module>
+jobPostedAdjusted+"','"+salaryCurrency+"';")
TypeError: cannot concatenate 'str' and 'float' objects

插入这条记录的最佳方式是什么?谢谢。

最佳答案

What is the best way insert this record?

使用 %s 占位符,并将您的参数作为单独的列表传递,然后 MySQLdb 为您完成所有参数插值。

例如……

params = [jobTitle,
jobHref,
salaryLow,
salaryHigh,
company,
jobPostedAdjusted,
salaryCurrency]
cur.execute("INSERT INTO jobs VALUES(DEFAULT, %s, %s, %s, %s, %s, %s, %s)", params)

这也可以保护您免受 SQL 注入(inject)攻击。


更新

I have print(cur.fetchall()) after the cur.execute.... When the code is run, it prints empty brackets such as ().

INSERT 查询不返回结果集,因此 cur.fetchall() 将返回一个空列表。

When I interrogate the DB from the terminal I can see nothing has been changed.

如果您使用的是像 InnoDB 这样的事务性存储引擎,那么您已经明确提交了事务,例如...

conn = MySQLdb.connect(...)
cur = conn.cursor()
cur.execute("INSERT ...")
conn.commit()

如果您想INSERT 很多行,在单个事务中完成它会快得多...

conn = MySQLdb.connect(...)
cur = conn.cursor()
for i in range(100):
cur.execute("INSERT ...")
conn.commit()

...因为 InnoDB(默认情况下)会在每次调用 conn.commit() 后将数据同步到磁盘。

Also, does the commit; statement have to be in somewhere?

commit 语句由 MySQL 客户端而不是服务器解释,因此您不能将它与 MySQLdb 一起使用,但它最终做的是一样的就像前面示例中的 conn.commit() 行一样。

关于python - 从 Python 插入 MySQL - 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17071775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com