[英]How do I create a mysql table using a variable name in Python?
我嘗試使用文章Python MySQLdb 執行表變量作為示例,但到目前為止沒有任何樂趣。 我正在嘗試創建一個表,其名稱是“存檔”和作為變量傳入的年份的串聯。 這是硬編碼表名稱的替代方法,例如“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)
這是我得到的錯誤:
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
任何幫助將不勝感激!
我嘗試實施我收到的答復,但到目前為止,結果並不令人滿意。 這是我使用三引號 SQL 的代碼片段:
sql = """CREATE TABLE IF NOT EXISTS %
haiku_text VARCHAR(120),
date_written CHAR(22))""" % table_name
cursor.execute(sql)
當我執行腳本時,我最終得到以下信息:
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
我還嘗試使用占位符表示法,因為我想避免 SQL 注入的可能性。 這是我的片段:
sql = """CREATE TABLE IF NOT EXISTS ?
haiku_text VARCHAR(120),
date_written CHAR(22))"""
cursor.execute(sql, table_name)
這是我執行時發生的情況:
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
我將對占位符的語法做一些進一步的研究,但與此同時任何進一步的建議都會很棒!
去老學校
sql = "CREATE TABLE IF NOT EXISTS " + table_name + """
haiku_text VARCHAR(120),
date_written CHAR(22))"""
print sql# check if printed correctly
嘗試:
sql = """CREATE TABLE IF NOT EXISTS %s
haiku_text VARCHAR(120),
date_written CHAR(22))""" % table_name
對於那些在表名和插入值中都使用%s
,這是行不通的,您需要使用不同的格式化方法,如下所示:
sql = "insert into {table} (f1,f2,f3) values (%s, %s, %s)"
cursor.execute(sql.formate(table="student"), ("name", "age", "score"))
以下是錯誤的:
sql = "insert into %s (f1,f2,f3) values (%s, %s, %s)"
cursor.execute(sql("student", "name", "age", "score"))
您可以嘗試以下代碼:
sql = """CREATE TABLE IF NOT EXISTS `%s`
haiku_text VARCHAR(120),
date_written CHAR(22))""" % (table_name)
table_name = 'users' sql = "CREATE TABLE IF NOT EXISTS " + table_name + "(name VARCHAR(90), age INTEGER(3))"
換個角度看,不是真正解決上面的問題,而是表名會變。
my_list = [*range(1999,2021, 1)]
for year in my_list:
sql = "CREATE TABLE archive_" + str(year)+" (category varchar(255), jan" + str(year)+ " varchar(255), feb" + str(year)+ " varchar(255) )"""
print(sql)
CREATE TABLE archive_1999 (category varchar(255), jan1999 varchar(255), feb1999 varchar(255) )
CREATE TABLE archive_2000 (category varchar(255), jan2000 varchar(255), feb2000 varchar(255) )
CREATE TABLE archive_2001 (category varchar(255), jan2001 varchar(255), feb2001 varchar(255) )
CREATE TABLE archive_2002 (category varchar(255), jan2002 varchar(255), feb2002 varchar(255) )
CREATE TABLE archive_2003 (category varchar(255), jan2003 varchar(255), feb2003 varchar(255) )
CREATE TABLE archive_2004 (category varchar(255), jan2004 varchar(255), feb2004 varchar(255) )
CREATE TABLE archive_2005 (category varchar(255), jan2005 varchar(255), feb2005 varchar(255) )
CREATE TABLE archive_2006 (category varchar(255), jan2006 varchar(255), feb2006 varchar(255) )
CREATE TABLE archive_2007 (category varchar(255), jan2007 varchar(255), feb2007 varchar(255) )
CREATE TABLE archive_2008 (category varchar(255), jan2008 varchar(255), feb2008 varchar(255) )
CREATE TABLE archive_2009 (category varchar(255), jan2009 varchar(255), feb2009 varchar(255) )
CREATE TABLE archive_2010 (category varchar(255), jan2010 varchar(255), feb2010 varchar(255) )
CREATE TABLE archive_2011 (category varchar(255), jan2011 varchar(255), feb2011 varchar(255) )
CREATE TABLE archive_2012 (category varchar(255), jan2012 varchar(255), feb2012 varchar(255) )
CREATE TABLE archive_2013 (category varchar(255), jan2013 varchar(255), feb2013 varchar(255) )
CREATE TABLE archive_2014 (category varchar(255), jan2014 varchar(255), feb2014 varchar(255) )
CREATE TABLE archive_2015 (category varchar(255), jan2015 varchar(255), feb2015 varchar(255) )
CREATE TABLE archive_2016 (category varchar(255), jan2016 varchar(255), feb2016 varchar(255) )
CREATE TABLE archive_2017 (category varchar(255), jan2017 varchar(255), feb2017 varchar(255) )
CREATE TABLE archive_2018 (category varchar(255), jan2018 varchar(255), feb2018 varchar(255) )
CREATE TABLE archive_2019 (category varchar(255), jan2019 varchar(255), feb2019 varchar(255) )
CREATE TABLE archive_2020 (category varchar(255), jan2020 varchar(255), feb2020 varchar(255) )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.