我很难使用MySQLdb模块将信息插入到我的数据库中.我需要在表中插入6个变量.
cursor.execute ("""
INSERT INTO Songs (SongName, SongArtist, SongAlbum, SongGenre, SongLength, SongLocation)
VALUES
(var1, var2, var3, var4, var5, var6)
""")
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这里的语法吗?
什么是在mysql上运行查询的最安全的方法,我知道MySQL和SQL注入涉及的危险.
但是我不知道如何运行查询以防止注入其他用户(webclients)可以操作的变量.我曾经写过自己的转义函数,但显然这是"未完成".
我应该使用什么以及我应该如何使用它来查询并通过python安全地插入MySQL数据库而不会冒险注入mysql?
是否有Python的Python等价物mysql_real_escape_string?
我试图直接从Python插入一些MySQL数据库的字符串,并继续被字符串中的引号绊倒.
mysql_string = "INSERT INTO candidate (name, address) VALUES "
for k, v in v_dict.iteritems():
mysql_string += " ('" + v_dict['name'] + "', '" + v_dict['address'] + "'), "
mysql_string += ";"
cursor.execute(mysql_string)
Run Code Online (Sandbox Code Playgroud)
我已经尝试了re.escape()但是它逃脱了字符串中的每个非字母数字字符,这不是我需要的东西 - 我只需要在这个实例中转义单引号(加上一般其他任何可能使MySQL绊倒的东西).
我想可以手动执行此操作,但是在Python中有更聪明的方法吗?
我需要从html文件生成一个insert语句列表(对于postgresql),是否有可用于python的库来帮助我正确转义并引用名称/值?在PHP中,我使用PDO进行转义和引用,是否有任何等效的python库?
编辑:我需要生成一个带有sql语句的文件,以便以后执行
如何在Python3中将输入转义为MySQL数据库?我正在使用PyMySQL并且工作正常,但是当我尝试做类似的事情时:
cursor.execute("SELECT * FROM `Codes` WHERE `ShortCode` = '{}'".format(request[1]))
Run Code Online (Sandbox Code Playgroud)
如果字符串有'或不起作用".我也尝试过:
cursor.execute("SELECT * FROM `Codes` WHERE `ShortCode` = %s",request[1])
Run Code Online (Sandbox Code Playgroud)
这个问题是库(PyMySQL)使用Python2.x的格式化语法%,它不再起作用了.我也发现了这种可能的解决方案
conn.escape_string()
Run Code Online (Sandbox Code Playgroud)
在这里,但我不知道在哪里添加此代码.这就是我得到的:
import pymysql
import sys
conn = pymysql.connect( host = "localhost",
user = "test",
passwd = "",
db = "test")
cursor = conn.cursor()
cursor.execute("SELECT * FROM `Codes` WHERE `ShortCode` = {}".format(request[1]))
result = cursor.fetchall()
cursor.close()
conn.close()
Run Code Online (Sandbox Code Playgroud)
编辑:我解决了!在PyMySQL中,正确的方法是这样的:
import pymysql
import sys
conn = pymysql.connect(host="localhost",
user="test",
passwd="",
db="test")
cursor = conn.cursor()
text = …Run Code Online (Sandbox Code Playgroud) 我正在写一个小的python脚本来帮助我自动创建我的个人项目的mysql数据库和相关帐户.此脚本的一部分是将数据库名称作为字符串,然后创建数据库的函数.
def createDB(dbConn, dbName):
import MySQLdb
c = dbConn.cursor()
query = """CREATE DATABASE %s;""";
c.execute(query, (dbName,))
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为MySQL的CREATE DATABASE请求数据库的不带引号的名称,如
CREATE DATAbASE test_db
Run Code Online (Sandbox Code Playgroud)
但我的代码尝试安全地将用户提供的数据库名称插入查询中,创建:
CREATE DATABASE 'test_db'
Run Code Online (Sandbox Code Playgroud)
并且你得到"你的MySQL语法接近测试时遇到问题".
即使这是供个人使用,我真的不想直接将用户提供的字符串插入任何类型的查询中.它反对我的宗教.有没有一种安全的方法可以将用户提供的数据库名称插入到python(或任何语言)的mySQL查询中,以确保用户输入test_db; DROP some_other_db;会被拒绝或正确转义?
我想在我的字符串中的每个引号之前插入一个\,使用pymysql将其插入到我的SQL数据库中.如果我不转义引号,我无法在数据库中插入字符串.
举个例子:
str ="好的我准备好了"
一定是 :
str ="好吧我准备好了"
但是打印str必须是:"好吧我已经准备好了"
为了执行它我做了:
str = str.replace("'", "\'")
Run Code Online (Sandbox Code Playgroud)
但它不起作用,我仍然无法在我的数据库中插入我的字符串.我有错误消息:
您的SQL语法有错误; 查看与您的MySQL服务器版本相对应的手册,以获得正确的语法,使用附近的语义搜索软件可以支持从直观的聊天机器人到第1行的"aarc"的所有内容.
我也会打印我的字符串,看不到\
有谁知道我该怎么办?
python ×6
mysql ×5
sql ×2
escaping ×1
mysql-python ×1
postgresql ×1
psycopg2 ×1
pymysql ×1
python-2.7 ×1
python-3.x ×1