python mysql.connector DictCursor?
파이썬에서mysqldb
커서를 다음과 같이 사전 커서로 선언할 수 있습니다.
cursor = db.cursor(MySQLdb.cursors.DictCursor)
그러면 에 있는 열을 참조할 수 있습니다.cursor
다음과 같은 이름으로 순환합니다.
for row in cursor: # Using the cursor as iterator
city = row["city"]
state = row["state"]
이 MySQL 커넥터를 사용하여 사전 커서를 만드는 것이 가능합니까?http://dev.mysql.com/doc/connector-python/en/connector-python-example-cursor-select.html
이 예제는 튜플만 반환합니다.
MySQL 제작자들이 결국 우리를 위해 이것을 할 것이라고 생각합니다.
이 기사에 따르면 ' diction리='를 통과하면 사용할 수 있습니다.커서 생성자에게 참입니다. http://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursordict.html
그래서 전 이렇게 해봤습니다.
cnx = mysql.connector.connect(database='bananas')
cursor = cnx.cursor(dictionary=True)
다음을 받았습니다.TypeError: cursor()에서 예기치 않은 키워드 인수 '사전'을 받았습니다.
전 이렇게 해봤습니다
cnx = mysql.connector.connect(database='bananas')
cursor = cnx.cursor(named_tuple=True)
다음을 받았습니다.TypeError: cursor()에 예기치 않은 키워드 인수 'name_tuple'이(가) 발생했습니다.
이것도 해봤어요cursor = MySQLCursorDict(cnx)
하지만 소용이 없었습니다.http://downloads.mysql.com/docs/connector-python-relnotes-en.a4.pdf 의 문서에 따르면 이 새로운 기능들이 알파 단계에 있다고 나와 있기 때문에 저는 분명히 여기서 잘못된 버전을 사용하고 있으며 인내심을 가져야 한다고 생각합니다.
가능한 해결책은 하위 분류를 포함합니다.MySQLCursor
다음과 같은 클래스:
class MySQLCursorDict(mysql.connector.cursor.MySQLCursor):
def _row_to_python(self, rowdata, desc=None):
row = super(MySQLCursorDict, self)._row_to_python(rowdata, desc)
if row:
return dict(zip(self.column_names, row))
return None
db = mysql.connector.connect(user='root', database='test')
cursor = db.cursor(cursor_class=MySQLCursorDict)
이제._row_to_python()
메소드는 a를 반환합니다.dictionary
대신에tuple
.
mysql 포럼에서 발견한 내용인데, mysql 개발자들이 직접 올린 것으로 알고 있습니다.언젠가 그들이 그것을 mysql connector package에 추가했으면 좋겠습니다.
제가 테스트해봤는데 효과가 있네요.
업데이트: 칼 M.W가 아래에 언급한 바와 같이... 이 하위 클래스는 mysql.connector의 v2에서 더 이상 필요하지 않습니다.mysql.connector가 업데이트되었으며 이제 다음 옵션을 사용하여 사전 커서를 활성화할 수 있습니다.
cursor = db.cursor(dictionary=True)
이 예제는 다음과 같이 작동합니다.
cnx = mysql.connector.connect(database='world')
cursor = cnx.cursor(dictionary=True)
cursor.execute("SELECT * FROM country WHERE Continent = 'Europe'")
print("Countries in Europe:")
for row in cursor:
print("* {Name}".format(Name=row['Name']
이 예에서는,'Name'
참조되는 데이터베이스의 열 이름에 따라 다릅니다.
또한 저장 프로시저를 사용하려면 이 작업을 대신 수행합니다.
cursor.callproc(stored_procedure_name, args)
result = []
for recordset in cursor.stored_results():
for row in recordset:
result.append(dict(zip(recordset.column_names,row)))
어디에stored_procedure_name
사용할 저장 프로시저의 이름입니다.args
는 저장된 프로시저의 인수 목록입니다(이 필드는 다음과 같이 비워 두십시오).[]
전달할 인수가 없는 경우).
이것은 의 예입니다.MySQL
여기에서 찾을 수 있는 문서: http://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursordict.html
Python 3.6.2와 MySQLDB 버전 1.3.10을 사용하여 다음과 같이 작업할 수 있습니다.
import MySQLdb
import MySQLdb.cursors
...
conn = MySQLdb.connect(host='...',
<connection info>,
cursorclass=MySQLdb.cursors.DictCursor)
try:
with conn.cursor() as cursor:
query = '<SQL>'
data = cursor.fetchall()
for record in data:
... record['<field name>'] ...
finally:
conn.close()
저는 PyCharm을 사용하고 있으며, MySQLDB 모듈 connections.py 과 cursors.py 을 조사하기만 하면 됩니다.
기본 커서가 열 이름이 없는 튜플을 반환하는 것도 같은 문제가 있었습니다.
답은 여기에 있습니다.
MySQLdb.cursors를 사용하는 동안 오류가 발생했습니다.MYSQL_CURRSOR CLASS의 DictCursor
app.config["MYSQL_CURSERCLASS"] = "딕커서"
언급URL : https://stackoverflow.com/questions/22769873/python-mysql-connector-dictcursor
'programing' 카테고리의 다른 글
파이썬에서 YAML 파일을 파싱하고 데이터에 접근하는 것? (0) | 2023.09.27 |
---|---|
automake error ' .ltmain.찾을 수 없는 (0) | 2023.09.27 |
AngularJS를 사용하여 다음을 바인딩하려면 어떻게 해야 합니까?AngularJS를 사용하여 다음을 바인딩하려면 어떻게 해야 합니까? (0) | 2023.09.27 |
자바스크립트에서 정수 분할을 하는 방법(분할 응답을 int not float)? (0) | 2023.09.27 |
부트스트랩 날짜 선택기로 선택한 날짜 변경 탐지 (0) | 2023.09.27 |