gpt4 book ai didi

python - 如何使用带有 pyodbc 的 cursor.fetchall 从数据库中的行创建列表?

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:09 26 4
gpt4 key购买 nike

我有一个脚本可以很好地处理简单的列表。它从单词列表中删除一些不需要的字符,使它们相互匹配并返回几个相似单词列表(比率为 0.6)。

但现在我需要它来处理 Access 数据库。我认为如果我在 crsr.fetchall() 上创建一个 for 循环并将所有项目放入一个列表(“单词”)中,它可以像以前那样工作。不幸的是,它没有,我真的想不通……

这是我的代码:

# -*- coding: utf-8 -*-
import pyodbc
import re
from difflib import SequenceMatcher

[x for x in pyodbc.drivers() if x.startswith('Microsoft Access Driver')]

# Connection to accdb

conn_str = (
r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
r'DBQ=C:\\Users\\alice\\Desktop\\lexique3.accdb;'
)
cnxn = pyodbc.connect(conn_str)
crsr = cnxn.cursor()

# Put all words into a list

crsr.execute('SELECT unites_lexicales FROM Mot;')
result1 = crsr.fetchall()
words = []
for item in result1 :
words.append[item]
print(words)

此时,我得到一个错误:

TypeError: 'builtin_function_or_method' object is not subscriptable

我试着用范围迭代:

crsr.execute('SELECT unites_lexicales FROM Mot;')
result = crsr.fetchall()
words = []
for i in range(0, len(result)) :
words.append(result[i])
print(words)

但我得到了一个看起来像这样的项目列表,它根本不令人满意:

[('anbaglé', ), ('anfoutan', ), ('òrdinè', ), ('alakous', ), ('ayen', ), ('anmè', ), ('antòtiyé', ),...]

这是在简单列表上完美运行的其余代码:

radicals = [] 
motifp = "^(re|em|dés)"
motifs = "(iste|ment|er|ant|able)$"

for word in words :
word = re.sub(motifp, '', word)
word = re.sub(motifs, '', word)
radicals.append(word)
print(radicals)

ratio = 0.6
n = len(radicals)
result = []
used_js = []

for i in range(n):
if i in used_js:
continue
matches = [words[i]]
js = (x for x in range(n) if x != i and x not in used_js)
for j in js:
if SequenceMatcher(None, radicals[i], radicals[j]).ratio() >= ratio :
matches.append(words[j])
used_js.append(j)
result.append(matches)
print(result)

这是我之前在一个简单列表上测试得到的结果:

[['flore', 'fleur', 'fleuriste'], ['remaniement', 'remanier', 'manier', 'maniable'], ['désaimer', 'aimant', 'aimer'], ['désemmêler', 'emmêler', 'mêler']]

我一定是弄错了整个光标部分,我真的不明白它是如何工作的...谢谢你的帮助!

最佳答案

您可以使用索引对每一行进行索引。此行只有一列,因此您可以使用 0。您也可以通过名称对其进行索引。

# ...
crsr.execute('SELECT unites_lexicales FROM Mot;')
result = crsr.fetchall()
words = []
for row in result:
# words.append(row['unites_lexicales'])
words.append(row[0])
print(words)
# ...

您还可以使用列表理解来获取第一列。

# ...
crsr.execute('SELECT unites_lexicales FROM Mot;')
result = crsr.fetchall()
# words = [row['unites_lexicales'] for row in result]
words = [row[0] for row in result]
print(words)
# ...

关于python - 如何使用带有 pyodbc 的 cursor.fetchall 从数据库中的行创建列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46735437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com