python中向mysql数据库插入变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中向mysql数据库插入变量相关的知识,希望对你有一定的参考价值。

list=[]
.........................
sql="select student.id from student"
cursor.execute(sql)
data = cursor.fetchone()
while data!=None:
...............
sql="insert censor vaules("+data[0]+","+list[i]+",'开机的流程')"
...............
最后一句报错TypeError: cannot concatenate(链接) 'str' and 'long' objects
如何如何改才能正确打印出sql

从错误提示来看是 str 和 object 无法拼接,这是表象错误,实际上,你根本用不着拼接 str 和 object ,你这句 insert 看起来是有问题的,写的很乱。首先你要理清 censor 这个表有几个字段,是什么类型,然后再在这里构造 insert ,这里的双引号是给 python 解析的,双引号中的 values 后的各值还要加单引号,那是给 mysql 看的,要用清醒的头脑认识到这点你才能拼接好。
改成这样试试,注意加了很多单引号:
sql="insert censor vaules('"+data[0]+"','"+list[i]+"','开机的流程')"
参考技术A sql="insert censor vaules("+data[0]+","+list[i]+",'开机的流程')"

list[i]是个长整型数,不能直接和字符串连接。用str(list[i])先转换它为字符串。
参考技术B 我想问一下 你的data的数据类型是什么 参考技术C 看着没逻辑错误。最后一个insert是不是少了into..追问

不是这个问题,主要是我在用print打印sql的时候变量没有被解析出来

追答

你得用cursor执行了sql负值给变量再打印变量啊,肯定不能直接打印sql

追问

??

追答

我估计你想问的和我理解的不太一样,你上面代码只有一个地方用了print,你是指那个print没有正常打印吗?如果是的话,检查数据库链接语句(你没贴出来)、是否有游标创建。

使用带有外部变量的python将数据插入mysql

【中文标题】使用带有外部变量的python将数据插入mysql【英文标题】:inserting data into mysql using python with external variables 【发布时间】:2015-08-06 17:10:57 【问题描述】:

我有一张表格,我需要在其中填充来自txt 文件的电子邮件地址、来自python 变量的日期和来源。在代码下方,a 是来自txtb 的变量,c 是我需要插入的python 变量

import csv,MySQLdb,os,os.path,datetime as dt
from sys import argv
path = argv
prompt = '>'
filename = raw_input(prompt)
fname = os.path.basename(filename)
source = fname
print "",source
date = dt.datetime.today().strftime("%d/%m/%y")
date_log = date
print "",date_log
db = MySQLdb.connect("localhost","root","passwd","testdb")
x = db.cursor()
csv_data  = csv.reader(file(filename))
for row in csv_data:
    print row
    query = (" INSERT INTO test(a,b,c) VALUES (%s,%s,%s)",row)
    x.execute(query, (date_log, source))
db.commit()
db.close()

这里出现如下错误:

File "csv2mysql.py", line 31, in <module>
    x.execute(query, (date_log, source))
  File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py",line159,in execute
    query = query % db.literal(args)
TypeError: unsupported operand type(s) for %: 'tuple' and 'tuple'

非常感谢任何帮助

【问题讨论】:

查询不好...检查查询字符串...您的查询类似于 ('INSERT INTO test(a,b,c) VALUES (%s, %s, %s) ', (val1, val2,...)) 【参考方案1】:

替换查询字符串

 query = (" INSERT INTO test(a,b,c) VALUES %s") %(row,)

 query = (" INSERT INTO test(a,b,c) VALUES %s") % str(row)

希望它对你有用...

【讨论】:

嗨 Dhaval,我按照你的说法更改了查询,出现了这个错误,你能告诉我该怎么做 ['a_121withme@indiatimes.com'] 回溯(最近一次通话最后一次):文件“2csv2mysql .py”,第 27 行,在 x.execute(query, (date,fname)) 文件“/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py”,第 159 行,在执行中query = query % db.literal(args) TypeError: 在字符串格式化期间并非所有参数都被转换 会有用的:***.com/questions/18053500/…

以上是关于python中向mysql数据库插入变量的主要内容,如果未能解决你的问题,请参考以下文章

myeclispe中向mysql中插入中文数据出现??问题解决办法

尽管没有超级用户,如何在 MYSQL 中向(root)用户授予超级权限?

带有 MySQL 的 NodeJS - 从数组中向 SQL 插入多行的最佳方法 [重复]

使用带有外部变量的python将数据插入mysql

MySQL 插入数据

MySQL 连接器/Python - 将 python 变量插入 MySQL 表