10

我创建了一个名为参与者的表,由参与者 ID(主键并且是身份[具有自动值])和 session_ID(外键)组成。

当我创建一个新参与者时,我想存储它的参与者 ID。

我有以下代码,但我收到以下消息错误:“返回附近的语法问题”

connection = pyodbc.connect('Driver={SQL Server Native Client 11.0};Serve=:xxx;Database=xxx;Uid=xxx;Pwd=xxx')
cur = connection.cursor()
pID = cur.execute('INSERT INTO participant(sessions_ID) VALUES (40) RETURNING participant_ID')

提前谢谢了!

4

3 回答 3

11

这是一个非常非常古老的帖子,我知道 - 但我有同样的问题并且遇到了它。我开始工作了,我想我会为那些像我一样在这里绊倒的人分享。请善待,这是我第一次通过代码。它不漂亮,但它应该让你开始。

def exec_query(self, query_type, query):
    # query_type: This is an enumumeration defining the CRUD operation of the query.

    # Note, the native client (11.0) might change with time and Windows updates)
    # Note, the driver varlue would normally go in a constant, I put it here just for clarity
    with pypyodbc.connect('DRIVER={SQL Server Native Client 11.0}; ' + self.cnx_str) as connection:
        cursor = connection.cursor()
        cursor.execute(query)

        if query_type is QueryType.create:
            try:
                cursor.execute("SELECT SCOPE_IDENTITY()")
                row = cursor.fetchone()
                seed_id = row[0]
            except AttributeError:
                seed_id = 0
            cursor.commit()
            return seed_id

        # ... Additional code for non 'create' operations
于 2015-01-08T17:09:33.423 回答
9

你可以通过两种方式做到这一点

  1. select SCOPE_IDENTITY()- 这是首选,因为它受限于您创建的身份的范围。

  2. select @@IDENTITY- 这是无论范围如何创建的最后一个身份(例如,触发器可以创建其他身份)。

在这里查看更多信息:http: //blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

于 2013-10-15T11:22:49.633 回答
0

请在插入查询后尝试SELECT @@Identity,这将返回当前连接的主键标识列值。

于 2013-10-15T10:11:40.533 回答