我有一个python列表,比如l
l = [1,5,8]
Run Code Online (Sandbox Code Playgroud)
我想编写一个sql查询来获取列表中所有元素的数据
select name from students where id = |IN THE LIST l|
Run Code Online (Sandbox Code Playgroud)
我该如何做到这一点?
我正在解析json数据并尝试将一些json数据存储到Mysql数据库中.我目前正在关注unicode错误.我的问题是我应该如何处理这个问题.
这是我的表格结构
CREATE TABLE yahoo_questions (
question_id varchar(40) NOT NULL,
question_subj varbinary(255),
question_content varbinary(255),
question_userId varchar(40) NOT NULL,
question_timestamp varchar(40),
category_id varbinary(20) NOT NULL,
category_name varchar(40) NOT NULL,
choosen_answer varbinary(255),
choosen_userId varchar(40),
choosen_usernick varchar(40),
choosen_ans_timestamp varchar(40),
UNIQUE (question_id)
);
Run Code Online (Sandbox Code Playgroud)
通过python代码插入时出错:
Traceback (most recent call last):
File "YahooQueryData.py", line 78, in <module>
+"VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", (row[2], row[5], row[6], quserId, questionTime, categoryId, categoryName, qChosenAnswer, choosenUserId, choosenNickName, choosenTimeStamp))
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/MySQLdb/cursors.py", line 159, …Run Code Online (Sandbox Code Playgroud) 据我所知,预备语句(主要)是一个数据库功能,允许您将参数与使用此类参数的代码分开.例:
PREPARE fooplan (int, text, bool, numeric) AS
INSERT INTO foo VALUES($1, $2, $3, $4);
EXECUTE fooplan(1, 'Hunter Valley', 't', 200.00);
Run Code Online (Sandbox Code Playgroud)
参数化查询替代手动字符串插值,因此不是这样做
cursor.execute("SELECT FROM tablename WHERE fieldname = %s" % value)
Run Code Online (Sandbox Code Playgroud)
我们可以做的
cursor.execute("SELECT FROM tablename WHERE fieldname = %s", [value])
Run Code Online (Sandbox Code Playgroud)
现在,似乎准备好的语句大部分都用在数据库语言中,参数化查询主要用于连接数据库的编程语言,尽管我已经看到了这个规则的例外.
问题在于询问预准备语句和参数化查询之间的区别会带来很多混乱.他们的目的无疑是相同的,但他们的方法似乎是截然不同的.然而,有消息表明两者都是相同的.MySQLdb和Psycopg2似乎支持参数化查询,但不支持预处理语句(例如,这里是MySQLdb和postgres驱动程序的TODO列表或sqlalchemy 组中的这个答案).实际上,有一个实现psycopg2游标的要点,支持准备好的语句和关于它的最小解释.还有一个建议是在psycopg2中继承游标对象以手动提供准备好的语句.
我想得到以下问题的权威答案:
预准备语句和参数化查询之间是否存在有意义的区别?这在实践中是否重要?如果使用参数化查询,是否需要担心预处理语句?
如果存在差异,Python生态系统中预准备语句的当前状态是什么?哪些数据库适配器支持预处理语
python database sql-injection prepared-statement parameterized-query
MySQLdb是否支持服务器端预处理语句?我无法从手册中弄清楚这一点.
例如:
command """%s abc %s,
abs %s jfh %s etc...""" % (var1, var2, var3, var4)
Run Code Online (Sandbox Code Playgroud)
我需要在多行中编写这些变量,因为代码中有很多变量(用于更新数据库).
测试:
% (var1, var2,\
var3,var4)
Run Code Online (Sandbox Code Playgroud)
不工作 (也在第一行末尾没有","测试)
错误:显示最后一个")"和:
SyntaxError: EOL while scanning string literal
Run Code Online (Sandbox Code Playgroud)
PS.我们得到了一个很好的答案,问题是"%s""""最后,它应该是:"%s"""" - 是的,一个空格解决了问题)))
我仍在学习 Python 作为出色的简单编程语言,问题出在 DataBase 上,我使用 MySQL 来构建它,然后我想从 Python 代码中选择一些元组,因为我确实编写了如下查询:
Q = "INSERT INTO contacts (FirstName,LastName,phone,mobile,email,address) VALUES('%s','%s','%s','%s','%s','%s') "% \
(FN,LN,phone,Mobile,email,address)
Run Code Online (Sandbox Code Playgroud)
因为使用变量,所以没关系。
但是如果我想在查询中使用 (LIKE'') 语句,我会遇到引号麻烦!如下:
Q = "SELECT LastName FROM contacts WHERE phone LIKE '_'%s'%'" %\
(phone)
Run Code Online (Sandbox Code Playgroud)
我能做些什么来解决这个问题,有什么提示吗?
import MySQLdb
import re
def write():
file = open('/home/fixstream/Desktop/test10.txt', 'r')
print file.read()
file.close()
write()
Run Code Online (Sandbox Code Playgroud)
我上面的代码,现在我想将文本文件存储到mysql数据库中.我是python以及数据库的新手.所以任何人都可以帮助我吗?