我尝试使用Python MySQLdb 执行表变量一文作为示例,但到目前为止还没有什么乐趣。我正在尝试创建一个表,其名称是“archive”和作为变量传递的年份的串联。这是硬编码表名称(例如“archive_2013”)的替代方案。
这是我的代码片段:
year_string = sys.argv[1]
if int(year_string) < 1999 or int(year_string) > 2014:
print "\n"
print "Year must be between 1999 and 2014\n"
sys.exit(1)
table_name = "archive_" + year_string
# Open database connection
db = MySQLdb.connect("localhost","root","menagerie","haiku_archive" )
# prepare a cursor object using cursor() method
cursor = db.cursor()
# Create table using execute() method.
sql = ""CREATE TABLE IF NOT EXISTS %s" % table_name
haiku_text VARCHAR(120),
date_written CHAR(22))"
cursor.execute(sql)
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误:
pablo@desktop=> ./insert_haiku_from_file_into_table.py 2013 qwert.txt
File "./insert_haiku_from_file_into_table.py", line 36
sql = ""CREATE TABLE IF NOT EXISTS %s" % table_name
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!
我尝试实施收到的答复,但到目前为止结果并不令人满意。这是我使用三引号 SQL 的代码片段:
sql = """CREATE TABLE IF NOT EXISTS %
haiku_text VARCHAR(120),
date_written CHAR(22))""" % table_name
cursor.execute(sql)
Run Code Online (Sandbox Code Playgroud)
当我执行脚本时,我最终得到以下结果:
pablo@desktop=> ./insert_haiku_from_file_into_table.py 2013 qwert.txt
Traceback (most recent call last):
File "./insert_haiku_from_file_into_table.py", line 38, in <module>
date_written CHAR(22))""" % table_name
ValueError: unsupported format character '
' (0xa) at index 28
Run Code Online (Sandbox Code Playgroud)
我还尝试使用占位符表示法,因为我想避免 SQL 注入的可能性。这是我的片段:
sql = """CREATE TABLE IF NOT EXISTS ?
haiku_text VARCHAR(120),
date_written CHAR(22))"""
cursor.execute(sql, table_name)
Run Code Online (Sandbox Code Playgroud)
这是我执行时发生的情况:
pablo@desktop=> ./insert_haiku_from_file_into_table.py 2013 qwert.txt
Traceback (most recent call last):
File "./insert_haiku_from_file_into_table.py", line 39, in <module>
cursor.execute(sql, table_name)
File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 159, in execute
query = query % db.literal(args)
TypeError: not all arguments converted during string formatting
Run Code Online (Sandbox Code Playgroud)
我将对占位符的语法进行一些进一步的研究,但同时任何进一步的建议都会很棒!
小智 5
去老学校
sql = "CREATE TABLE IF NOT EXISTS " + table_name + """
haiku_text VARCHAR(120),
date_written CHAR(22))"""
print sql# check if printed correctly
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10090 次 |
| 最近记录: |