在python3.2和win7上的pyodbc上创建SQL Server 2008 R2上的表的错误

时间:2014-08-01 16:08:47

标签: python sql sql-server-2008 python-3.x pyodbc

我试图在win7上从Eclipse pydev(python 3.2)访问SQL Server 2008 R2。

我需要在数据库上创建一个表。

代码可以运行良好。但是,我无法在数据库中创建表。 如果我打印sql字符串并从SQL Server管理工作室运行查询,没有问题。

import pyodbc
sql_strc = " IF OBJECT_ID(\'[my_db].[dbo].[my_table]\') IS NOT NULL \n"
sql_strc1 = " DROP TABLE [my_db].[dbo].[my_table] \n"  

sql_stra = " CREATE TABLE [my_db].[dbo].[my_table] \n" 
sql_stra1 = "(\n"
sql_stra1a = " person_id INT NOT NULL PRIMARY KEY, \n"
sql_stra1b = " value float NULL, \n"
sql_stra1r = "); \n"

sql_str_create_table = sql_strc + sql_strc1 + sql_stra + sql_stra1 + sql_stra1a + sql_stra1b + sql_stra1r

# create table
sql_str_connect_db  = "DRIVER={SQL server};SERVER={my_db};DATABASE={my_table};UID=my_id; PWD=my_password" 
cnxn = pyodbc.connect(sql_str_connect_db)
cursor = cnxn.cursor()
cursor.execute( sql_str_create_table)

任何帮助将不胜感激。

由于

1 个答案:

答案 0 :(得分:2)

Autocommitoff by default,请添加以下内容以提交更改:

cnxn.commit()

使您的代码更具可读性的一些未经请求的建议:

  1. 从SQL字符串中删除不必要的转义字符
  2. 在定义多行字符串时使用三引号(""")语法。保留换行符并且不需要明确添加。
  3. connect函数调用中使用关键字(这很简单,但我认为这样可以简化格式设置)
  4. 通过这些更改,您的最终代码如下所示:

    import pyodbc
    
    sql = """
    IF OBJECT_ID('[my_db].[dbo].[my_table]') IS NOT NULL
      DROP TABLE [my_db].[dbo].[my_table]
    
    CREATE TABLE [my_db].[dbo].[my_table]
      (
         person_id INT NOT NULL PRIMARY KEY,
         value     FLOAT NULL
      )      
          """
    
    cnxn = pyodbc.connect(driver='{SQL Server}', server='server_name',
                          database='database_name', uid='uid', pwd='pwd')
    cursor = cnxn.cursor()
    # create table
    cursor = cursor.execute(sql)
    cnxn.commit()