将数据库记录拆分为变量
split database record into variables
我有一个功能可以在数据库中搜索 id code/name 匹配的行,然后加载记录
例如[(1, 'John', 'Smith', 30)]
我正在使用 python 以及如何将此列表拆分为单独的变量
例如
ID = 1
Firstname = John
Surname = Smith
Age = 30
抱歉,我是新手,实现起来可能非常简单。
这是我目前拥有的:
def find():
cursor = db.cursor()
searchname = str(input('Enter name of product: '))
sql = "SELECT * FROM items WHERE name = '%s';" % searchname.strip()
cursor.execute(sql)
a = cursor.fetchall()
print(a)
row = a
感谢您花时间提供帮助:)
假设您使用的是 sqlite3
,它内置了 a nifty row factory,让您可以像访问字典一样访问行,以列名作为键:
# right after connect
db.row_factory = sqlite3.Row
def find():
cursor = db.cursor()
searchname = str(input('Enter name of product: '))
sql = "SELECT * FROM items WHERE name = '%s';" % searchname.strip()
cursor.execute(sql)
a = cursor.fetchall()
for row in a:
print(row['ID'])
我知道这不是您真正想要的,但通常是您想要的。 Creating variables dynamically is a bad idea。不过,如果您真的想这样做,答案与将任何映射转储到本地范围内一样,如果需要,您可以搜索本地范围。
如果您更喜欢属性式访问(如 a.ID
)而不是字典式访问(如 a['ID']
),那很简单。 (但请记住,并非每个有效的 SQL 列名都是有效的 Python 标识符!)
最有效的方法可能是从 description
:
中创建一个 namedtuple
row_type = namedtuple('row', [col.name for col in cursor.description])
for row in map(row_type._make, a):
print(row.ID)
如果您使用的是 MySQL,我不知道是否有任何 MySQL 库提供了 Row
的等价物,但使用游标的 description
属性,就像我们用它构建 namedtuple
一样。例如:
for row in a:
drow = {cursor.description[i].name: row[i] for i in range(len(row))}
print(row['ID'])
不同于特定于sqlite3
的特殊Row
工厂,the DB-API 2.0 spec需要Cursor.description
。
我有一个功能可以在数据库中搜索 id code/name 匹配的行,然后加载记录
例如[(1, 'John', 'Smith', 30)]
我正在使用 python 以及如何将此列表拆分为单独的变量
例如
ID = 1
Firstname = John
Surname = Smith
Age = 30
抱歉,我是新手,实现起来可能非常简单。
这是我目前拥有的:
def find():
cursor = db.cursor()
searchname = str(input('Enter name of product: '))
sql = "SELECT * FROM items WHERE name = '%s';" % searchname.strip()
cursor.execute(sql)
a = cursor.fetchall()
print(a)
row = a
感谢您花时间提供帮助:)
假设您使用的是 sqlite3
,它内置了 a nifty row factory,让您可以像访问字典一样访问行,以列名作为键:
# right after connect
db.row_factory = sqlite3.Row
def find():
cursor = db.cursor()
searchname = str(input('Enter name of product: '))
sql = "SELECT * FROM items WHERE name = '%s';" % searchname.strip()
cursor.execute(sql)
a = cursor.fetchall()
for row in a:
print(row['ID'])
我知道这不是您真正想要的,但通常是您想要的。 Creating variables dynamically is a bad idea。不过,如果您真的想这样做,答案与将任何映射转储到本地范围内一样,如果需要,您可以搜索本地范围。
如果您更喜欢属性式访问(如 a.ID
)而不是字典式访问(如 a['ID']
),那很简单。 (但请记住,并非每个有效的 SQL 列名都是有效的 Python 标识符!)
最有效的方法可能是从 description
:
namedtuple
row_type = namedtuple('row', [col.name for col in cursor.description])
for row in map(row_type._make, a):
print(row.ID)
如果您使用的是 MySQL,我不知道是否有任何 MySQL 库提供了 Row
的等价物,但使用游标的 description
属性,就像我们用它构建 namedtuple
一样。例如:
for row in a:
drow = {cursor.description[i].name: row[i] for i in range(len(row))}
print(row['ID'])
不同于特定于sqlite3
的特殊Row
工厂,the DB-API 2.0 spec需要Cursor.description
。