使用Python

时间:2015-08-08 11:35:44

标签: python sql pandas dataframe

我正在尝试使用Python创建一个DataFrame并将其写入SQL表。该表应以变量命名,具体为table_nametable_name将在运行我的代码时更改)。以下是我尝试设置此代码的相关部分:

con = sql.connect(r'/Users/linnk/Desktop/Results/Data.db')  # Creates database to write to
cur = con.cursor() 

...code...

cur.execute('''CREATE TABLE IF NOT EXISTS ''' + table_name + ''' (Date, Morning1, Day1, Evening1, Night1, Morning3, Day3, Evening3, Night3)''')

运行它会产生错误(对于最后一行):

OperationalError: near "-": syntax error

我尝试对我的代码的最后一行进行一些修改,但得到类似的错误。任何人都可以帮助我发现我的错误/对我的代码进行必要的调整吗?有关信息,table_name包含一个字符串。

提前感谢您提出任何建议。

修改/更新:

根据我的阅读,似乎最好创建一个字符串然后传递给cur.execute():

   stringexecute='''\'CREATE TABLE IF NOT EXISTS '''+ table_name +''' (Date, Morning1 real, Day1 real, Evening1 real, Night1 real, Morning3 real, Day3 real, Evening3 real, Night3 real)\''''
   cur.execute(stringexecute)

有关信息,stringexecute输出:

stringexecute= 'CREATE TABLE IF NOT EXISTS GUTUR_400_F1-KIAGA-1 (Date, Morning1Ph real, Day1Ph real, Evening1Ph real, Night1Ph real, Morning3Ph real, Day3Ph real, Evening3Ph real, Night3Ph real)'

然而,代码仍然不起作用。它给出了:

OperationalError: near "'CREATE TABLE ......'": syntax error

任何进一步的帮助将不胜感激。我主要看过并且(未成功)尝试了以下资源中的方法: http://www.sommarskog.se/dynamic_sql.html#objectnames https://docs.python.org/2/library/sqlite3.html

修改

只要变量table_name不包含' - '(以及可能的其他符号),结果如下:

 cur.execute("CREATE TABLE IF NOT EXISTS " + table_name + " (Date, Morning1 real, Day1 real, Evening1 real, Night1 real, Morning3 real, Day3 real, Evening3 real, Night3 real)")

2 个答案:

答案 0 :(得分:1)

为什么不使用:

cur.execute('CREATE TABLE IF NOT EXISTS {tab} (Date, Morning1, Day1, Evening1, Night1, Morning3, Day3, Evening3, Night3)'
   .format(tab=table_name))

答案 1 :(得分:0)

输入此代码:

def crear_tabla (name):
cur = conn.cursor()
cur.execute('''CREATE TABLE {tab}
  (ID INT PRIMARY KEY     NOT NULL,
  NAME           TEXT    NOT NULL,
  AGE            INT     NOT NULL,
  ADDRESS        CHAR(50),
  SALARY         REAL);'''.format(tab=name))
print ("Table created successfully")
cur.close()
conn.commit()